我有一个状态,我只想在某个功能组件初始化时改变它。所以我打算做这样的事情:
export default function SalesFeedPage(){
const {salesFeed} = useSelector((state) => state.feedReducer);
const dispatch = useDispatch();
// i want to do sth like this
// useEffect(() => dispatch(loadSalesFeed()), []);
// or
// dispatch(loadSalesFeed());
return (
<div>
hello
{salesFeed}
</div>
)
}
这不起作用,因为它无限地重新呈现SalesFeedPage。
是否有办法在功能组件中实现我想要的功能?
2条答案
按热度按时间a0x5cqrl1#
只要保留第一个useEffect就可以了,但是要确保只返回useEffect内部的清除函数,而不是调度返回值。
jxct1oxe2#
你必须使用,
如果你在没有依赖数组的
useEffect
外部使用Dispatch,你的组件会不断地被重新渲染。这是因为,当你的组件挂载时,你的dispatch函数会被调用,所以你的redux状态会改变,然后你的组件会再次被渲染。然后你的dispatch函数会被再次调用。然后这会让你的组件再次被渲染。这会导致无限的渲染周期。希望这对你有所帮助!