我有以下情况:
barplot(prop.table(table(data$sexo,data$pais), margin=1))
这可以很好地工作,并且完全符合我的要求,但是ESLint发出 const [values, setValues] = useState({
username: "",
password: ""
});
const [submitButton, setSubmitButton] = useState({
disabled: true
});
useEffect(() => {
const disabled = !(values.username.length && values.password.length);
setSubmitButton({ ...submitButton, disabled });
}, [values]);
警告。
当我执行自动修复时,它会将react-hooks/exhaustive-deps
添加为useEffect的依赖项,但是这会导致无限循环。这似乎是一个简单的情况,但我无法弄清楚自己在做什么错。我见过在useEffect中使用setState之类的其他人的代码,而没有将其声明为依赖项。
答案 0 :(得分:1)
您应使用useState
中的functional updater form,它将提供您状态的快照,从而消除了直接引用它的需要。
setSubmitButton(previous => ({ ...previous, disabled }));
由于React
已经知道submitButton
的当前值,并且仅在更改状态时运行回调,这将在组件范围之外发生,并且eslint
不会对您发火。
用Dan's字
我喜欢将这些情况视为“虚假依赖项”。是的,算是 必要的依赖关系,因为我们在内部编写了setCount(count + 1) 影响。但是,我们只需要计数即可将其转换为计数 + 1并“发回”到React。但是React已经知道当前的数量了。我们需要告诉React的就是增加状态- 不管现在是什么。