rax icon indicating copy to clipboard operation
rax copied to clipboard

[BUG] useEffect 中执行函数存在时序问题

Open zivyangll opened this issue 3 years ago • 5 comments

下面代码会 return 后会执行 alert(1)。

  useEffect(() => {
    if (1) return;
    const timer = setInterval(() => {
      alert(1)
      clearInterval(timer);
    }, 1000);
  }, [])
  • Device: MacBook Pro
  • OS: MacOS
  • Browser: Chrome
  • Rax Version: ^1.1.0

zivyangll avatar Apr 06 '21 07:04 zivyangll

https://github.com/raxjs/rax-app/blob/3eebae97cc680f64485e88c9d2565a37aebe013b/packages/rax-babel-config/src/index.js#L65

直接原因是 babel-plugin-minify-dead-code-elimination-while-loop-fixed 这个 babel 插件引起的,if (1) return; 被移除掉了,但是后面的 const timer = ... 没有移除

复现地址:Babel REPL

babel issue 地址:https://github.com/babel/minify/issues/1020

fengzilong avatar Oct 13 '21 12:10 fengzilong

修复 PR:https://github.com/kingback/babel-plugin-minify-dead-code-elimination-while-loop-fixed/pull/1

fengzilong avatar Oct 14 '21 08:10 fengzilong

这个 babel 插件未来应该可以干掉了

SoloJiang avatar Jan 24 '22 02:01 SoloJiang

这个 pr 提到 raxjs 下对应的仓库吧

SoloJiang avatar May 15 '22 14:05 SoloJiang

这个 pr 提到 raxjs 下对应的仓库吧

https://github.com/raxjs/babel-plugin-minify-dead-code-elimination-while-loop-fixed/pull/1 done~

fengzilong avatar May 15 '22 16:05 fengzilong