我有一个更新两个状态的回调函数。
下面给出了一个示例代码,
const [index, setIndex] = useState(-1);
const [fields, setFields] = useState([]);
const callbackFunction = () => {
setIndex(prevState => {
const newIndex = prevState + 1;
setFields(prevState => [...prevState, {id: newIndex, question: "", type: ""}]);
return newIndex;
});
};
//I will be calling the callbackFunction somewhere over here in my JSX
请注意,我的初始描述可能无法准确描述代码。如果是这样,请道歉。
我想知道我实现的代码是不是
对我来说危险信号是状态更新中的状态更新。
预先感谢您提供的任何可以启发我的信息。
答案 0 :(得分:1)
useState
。你可以做的是:
const callbackFunction = () => {
const newIndex = index+ 1;
setIndex(newIndex);
setFields([...fields, {id: newIndex, question: "", type: ""}]);
};
这种 IMO 方式更清晰、更直接,没有嵌套代码,在 setState
中没有额外的回调函数,应该可以正常工作。
答案 1 :(得分:1)
只需这样做
const [index, setIndex] = useState(-1);
const [fields, setFields] = useState([]);
const callbackFunction = () => {
const newIndex = index+ 1;
setIndex(prevState => newIndex);
setFields(prevState => [...prevState, {id: newIndex, question: "", type: ""}])
};
您的意图很明确,为什么要尝试更新 setFeilds
中的 setIndex
。您想获取更新后的索引并将其传递给 setFeilds
。当然,您在这里尝试做的是一种反模式。您可以简单地按照上述方式来实现您想要的。