我正在尝试使用新的React Hooks的
useEffect
API,但它似乎会一直运行,形成无限循环!我只想让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'));
<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>
react-hooks
ESLint插件,它会被exhaustive-deps
规则标记出来。正确的解决方案似乎是使用useCallback
钩子,更多讨论请参见此处:https://github.com/facebook/react/issues/14920#issuecomment-471070149 - Daniel Cooke