直接上图吧 我设置了一个定时器 为什么会重复打印?
如何消除这个 bug 尝试过 useMemo 没有成功...
以下方法都可以解决,根据实际需求选择
useEffect(()=>{
setTimeout(()=>{setName("alan")}, 2000)
},[])
[]确保只执行一次
关于useState的严格相等的判定的解决:
function reducer(state, action) {
switch (action.type) {
case "changeName":
return { name: "alan" };
default:
return state;
}
const [name, setName] = useReducer(reducer, { name: "mike" });
setTimeout(() => {
setName({ type: "changeName" });
}, 2000);
immutable.js
: 其他库当然也可以自问自答一下 多次测试后的猜测:
因为我 setName 是一个新的 {} 所以引用了新的内存地址,换成普通类型就没问题了
react 可能认为我是一个新的变量,所以会重复渲染. 如果有大佬有更好的解释 请指教!
13 回答12.9k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
3 回答2.2k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
详细的原因可以看下我的这个回答,结论就是要想能终止更新,最终要上dispatchAction里面传入的action能和前一轮的更新的state是能严格相等的(也就是Object.is)
https://segmentfault.com/q/10...