javascript - 独家反应状态钩子
问题描述
我有一些布尔反应状态钩子,一次只允许true
一个。它们的状态取决于传递的字符串变量。我目前有这个代码,它工作正常:
const [a, setA] = useState(false);
const [b, setB] = useState(false);
const [c, setC] = useState(false);
const [d, setD] = useState(false);
if (foo == "string1") {
setA(true);
setB(false);
setC(false);
setD(false);
}
if (foo == "string2") {
setB(true);
setA(false);
setC(false);
setD(false);
}
if (foo == "string3") {
setC(true);
setA(false);
setB(false);
setD(false);
}
if (foo == "string4") {
setD(true);
setA(false);
setB(false);
setC(false);
}
我将它们用于条件样式,所以它们必须是布尔值(也许我需要重新考虑我的方法?)。
但是,它非常冗长。有没有更好的方法来写这个?
解决方案
改为使用单个状态变量,其值包含当前“活动”的变量:
const [active, setActive] = useState();
if (foo === 'string1') {
setActive('a');
}
if (foo === 'string2') {
setActive('b');
}
// etc
推荐阅读
- python - 如果列表不够长,则将项目添加到列表中
- c - 如何在C的头文件中隐藏函数?
- javascript - TypeError:当检查值等于零时,无法读取未定义的属性“0”
- terraform - 如何根据资源所在的环境动态命名资源?
- javascript - React-Redux:JSX 中的访问调度类型
- gcc - 刷完 SD 卡 / Buildroot Distro 后安装 GCC
- mongodb - MongoDB 4.4.1 mirroredRead vs secondaryPreferred readPerence
- java - 即使提供了@EnableTransactionManagement,@Transactional 注释也不会回滚 RuntimeException
- r - R随机数据拆分基于2列
- python - 我在python中编写了一个登录项目,但它不起作用