Yan*_*Tay 18 javascript reactjs react-hooks
我正在尝试新的React Hooks的useEffectAPI,它似乎永远在无限循环中运行!我只希望回调useEffect运行一次.这是我的代码供参考:
单击"运行代码片段"以查看"Run useEffect"字符串无限地打印到控制台.
function Counter() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
console.log('Run useEffect');
setCount(100);
});
return (
<div>
<p>Count: {count}</p>
</div>
);
}
ReactDOM.render(<Counter />, document.querySelector('#app'));Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="app"></div>Run Code Online (Sandbox Code Playgroud)
Yan*_*Tay 33
发生这种情况是因为useEffect在每次渲染之后触发,这是在Counter()无状态功能组件的情况下调用函数.当你做一个setX从返回的呼叫useState中useEffect,阵营将再次呈现该组件,并useEffect再次运行.这会导致无限循环:
Counter()→交通useEffect()→交通setCount()→交通Counter()→交通useEffect()→交通...(循环)
要使您的useEffect运行只运行一次,请将空数组[]作为第二个参数传递,如下面修订的代码段所示.
第二个参数的意图是在数组参数中的任何值发生更改时告诉React:
useEffect(() => {
setCount(100);
}, [count]); // Only re-run the effect if count changes
Run Code Online (Sandbox Code Playgroud)
您可以将任意数量的值传递到数组中,并且useEffect只有在任何一个值发生更改时才会运行.通过传入一个空数组,我们告诉React不要跟踪任何更改,只运行一次,有效模拟componentDidMount.
function Counter() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
console.log('Run useEffect');
setCount(100);
}, []);
return (
<div>
<p>Count: {count}</p>
</div>
);
}
ReactDOM.render(<Counter />, document.querySelector('#app'));Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="app"></div>Run Code Online (Sandbox Code Playgroud)
阅读有关useEffect的更多信息.
| 归档时间: |
|
| 查看次数: |
5926 次 |
| 最近记录: |