UMI model 里”慎用” useEffect

By | 12月 3, 2024

model 是不跟组件绑定的,empty depList 的 useEffect 整个 APP 生命周期内只执行一次。

下面这个代码在 model 内,不会随着 component 的渲染而重新执行。model 里的 state 变化了,才会重新执行。

  useEffect(() => {
    console.log('do something');
  });

下面的代码,要在加载之后做初始化。如果 getData 失败,将没有机会再次执行,除非刷新浏览器页面。

useEffect(() => {
    getData().then(init);
  }, []);

总的来说如果在 model 里使用 useEffect,慎用没有 depList 或 depList 是空,这种情况下应当放到某个 component 里。


再次思考后,发觉上面说的不对。治标不治本,应当解决为啥 useEffect 里的代码执行失败,而不是不要这样使用 useEffect.

项目中碰到的问题是第一次打开没有登录,model 里 useEffect 执行失败,登录成功后,失败的 useEffect 不会重新执行。

解决方法:登录成功后,重新加载页面。