Redux:在组件/函数初始化时调度

ogsagwnx  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(113)

我有一个状态,我只想在某个功能组件初始化时改变它。所以我打算做这样的事情:

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。
是否有办法在功能组件中实现我想要的功能?

a0x5cqrl

a0x5cqrl1#

只要保留第一个useEffect就可以了,但是要确保只返回useEffect内部的清除函数,而不是调度返回值。

useEffect(() => { dispatch(loadSalesFeed()) }, [])
jxct1oxe

jxct1oxe2#

你必须使用,

useEffect(() => dispatch(loadSalesFeed()), [])

如果你在没有依赖数组的useEffect外部使用Dispatch,你的组件会不断地被重新渲染。这是因为,当你的组件挂载时,你的dispatch函数会被调用,所以你的redux状态会改变,然后你的组件会再次被渲染。然后你的dispatch函数会被再次调用。然后这会让你的组件再次被渲染。这会导致无限的渲染周期。
希望这对你有所帮助!

相关问题