直接上图吧 我设置了一个定时器 为什么会重复打印?
如何消除这个 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 可能认为我是一个新的变量,所以会重复渲染. 如果有大佬有更好的解释 请指教!
10 回答11.4k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.5k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
详细的原因可以看下我的这个回答,结论就是要想能终止更新,最终要上dispatchAction里面传入的action能和前一轮的更新的state是能严格相等的(也就是Object.is)
https://segmentfault.com/q/10...