Ada*_*dam 1 javascript reactjs material-ui
请检查代码和框:https ://codesandbox.io/s/bold-hamilton-k1nzs
在我运行代码的那一刻,我得到了一个无限循环,您可以检查控制台以查看条目如何呈指数增长。最终网站崩溃了。
我有一个像这样的状态变量:
const [checkbox, setCheckBox] = useState({});
Run Code Online (Sandbox Code Playgroud)
然后我在 useEffect 中调用一个函数:
useEffect(() => {
createCheckbox();
});
Run Code Online (Sandbox Code Playgroud)
这是 createCheckbox 函数:
const createCheckbox = () => {
let checkboxObj = {};
rows.forEach((e) => {
checkboxObj[e.id] = false;
});
setCheckBox(checkboxObj);
};
Run Code Online (Sandbox Code Playgroud)
我在第 76 行有一个 console.log 来展示问题。它是 console.log(checkbox)
知道发生了什么吗?
使用依赖数组useEffect。所以这:
useEffect(() => {
createCheckbox();
});
Run Code Online (Sandbox Code Playgroud)
应该:
useEffect(() => {
createCheckbox();
}, []);
Run Code Online (Sandbox Code Playgroud)
如您所知,useEffect()接受一个依赖数组作为第二个参数。它只会在数组中的任何变量发生变化时运行。当您在useEffect没有第二个参数的情况下运行时,它充当 componentDidMount 和 componentDidUpdate。因此,由于您在无依赖项的 useEffect 中设置了状态,状态更改会一次又一次地触发它,从而创建无限循环的渲染。
当useEffect使用空依赖数组调用时,它只会在第一次渲染时运行一次。而这正是你所需要的。
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |