Reactjs 使用两个useffect挂钩
我试着用钩子做反应。我有这样一种状态:Reactjs 使用两个useffect挂钩,reactjs,react-hooks,Reactjs,React Hooks,我试着用钩子做反应。我有这样一种状态: const [state, setState] = useState<State>({ titel: "", somethingElse: "", tabledata: [], }); 现在我有了行为,第二个useffect正在覆盖第一个useffect setState命令。 我的变量titel和somethingels总是空的 现在我可以通过以下方式改变我的状态: const [titel, setTitel] =
const [state, setState] = useState<State>({
titel: "",
somethingElse: "",
tabledata: [],
});
现在我有了行为,第二个useffect正在覆盖第一个useffect setState命令。
我的变量titel和somethingels总是空的
现在我可以通过以下方式改变我的状态:
const [titel, setTitel] = useState<>({
titel = ""
});
const [somethingElse, setSomethingElse] = useState<>({
somethingElse = ""
});
但这使整个过程变得不清楚,而且要一次性设置多个变量的状态并不像我们使用setState…state,titel=Hello,somethingElse=Else那样容易
还有其他可能性吗
第二个useeffect将覆盖第一个useeffect设置状态
useState函数不会自动合并状态。因此,您需要使用通过回调访问的前一个状态
useEffect(
() => {
const tabledata = ...
setState(prevState => ({ // use previous state
...prevState,
tabledata
}))
}, [props.taenzer]
)
还有其他可能性吗
你可以通过道具了解你的状态,移除第一个效果而不依赖它
const [{ title, somethingElse, tabledata }, setState] = useState<State>({
...props,
tabledata: [],
});
第二个useeffect将覆盖第一个useeffect设置状态
useState函数不会自动合并状态。因此,您需要使用通过回调访问的前一个状态
useEffect(
() => {
const tabledata = ...
setState(prevState => ({ // use previous state
...prevState,
tabledata
}))
}, [props.taenzer]
)
还有其他可能性吗
你可以通过道具了解你的状态,移除第一个效果而不依赖它
const [{ title, somethingElse, tabledata }, setState] = useState<State>({
...props,
tabledata: [],
});
第二个useffect覆盖第一个useffect setState命令是什么意思?我无法从示例中看出。Tbh,我喜欢第二种方法。因为钩子,我尽量跳过嵌套状态。使用这种方法,您可以以不变的方式非常轻松地操纵状态。如果我选择嵌套,我选择usereducer看起来像一个竞争条件。在装载过程中,您将获得两个正在执行的效果,并且顺序可能尚未确定,因此您将获得两个几乎同时执行的setState,最后一个将保持不变,但很可能两者都将读取相同的初始状态。您所说的第二个useffect是指覆盖第一个useffect setState命令?我无法从示例中看出。Tbh,我喜欢第二种方法。因为钩子,我尽量跳过嵌套状态。使用这种方法,您可以以不变的方式非常轻松地操纵状态。如果我选择嵌套,我选择usereducer看起来像一个竞争条件。在装载过程中,您将获得两个正在执行的效果,并且顺序可能尚未确定,因此您将获得两个几乎同时发生的设置状态,最后一个将保持不变,但很可能两个都将读取相同的初始状态。