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 不会重新执行。
解决方法:登录成功后,重新加载页面。