我正在尝试找出哪种实践是最好的:
const [fields, setFields] = useState([{ value: null }]);
const [data, setData] = useState();
function handleChange(e) {
const values = [...fields];
setData({
...data,
[e.target.name]: e.target.value
});
setFields(values);
console.log(data)
}
useEffect(() => {
requestInputData().then((data) => {
setFields(data["input"]);
}).catch(error => {
notification.error({
message: APPLICATION_NAME,
description: error.message || 'Sorry! Something went wrong. Please try again!'
});
});
}, []
)
return (
<div >
{fields.map((field) => {
return (
<div >
<input
type="text"
name={field}
placeholder={field}
onChange={e => handleChange(e)}
/>
<br/>
</div>
);
})}
</div>
);
#define TEST
//#define TEST commented if not used or simply deleted
出于可读性考虑,我更喜欢定义一个“布尔”并在#define TEST 1
#define TEST 0 //if not used
中对其进行检查,但是我猜它效率不高,因为它不使用if
,并且每次都需要对其进行检查。如果
答案 0 :(得分:5)
尽管您不能在第二种情况下使用#ifdef
,但是您绝对可以使用#if
,因此TEST 0不会有任何额外的运行时成本。也意味着您可以为TEST设置多个不同的值,也许对应于不同的日志级别或类似的东西
(如Bathsheba所建议,将我的评论发布为答案)
答案 1 :(得分:2)
许多月亮以前,有些编译器(如果我没记错的话,就是一个Solaris编译器)无法正确编译使用第一个代码段的代码。
但是C标准(现在)要求它们这样做,因此使用第二种方法(现在被视为特质)根本没有任何好处。
当然,如果您需要TEST
是一个数值,例如在条件检查中,而不是仅使用#ifdef
,那么您就需要使用第二种方法。