1 回答

TA貢獻1799條經(jīng)驗 獲得超8個贊
看起來您的組件在每個渲染周期都訂閱了商店,并且由于訂閱回調(diào)更新了組件狀態(tài),因此觸發(fā)了另一個渲染周期。
您可能只希望組件訂閱您的商店一次。
您可以使用效果訂閱一次以在更新時記錄狀態(tài)。使用效果清理功能取消訂閱。
const App = () => {
const [val, setVal] = React.useState(0);
handleClick = () => {
store.dispatch({type: 'INCREMENT'})
}
useEffect(() => {
const unsubscribe = store.subscribe(() => {
const state = store.getState();
console.log("Listener is called", state.count);
setVal(state.count);
});
/* unsubscribe() */;
return unsubscribe; // <-- return cleanup function
}, []); // <-- empty dependency array to run once on mount
return (
<div>
<span>{val}</span>
<button onClick={handleClick}>Click</button>
</div>
);
}
添加回答
舉報