alibaba / rax

🐰 Rax is a progressive framework for building universal application. https://rax.js.org
Other
7.99k stars 627 forks source link

[BUG] useEffect 调用 setState 堆栈溢出 #2377

Open ClarkXia opened 1 year ago

ClarkXia commented 1 year ago

⌨️

Where is the bug from?

Rax Core

Minimal code and steps to reproduce the bug

import { createElement, useEffect, useState } from 'rax';

function Comp(props) {
  const [, setA] = useState(props.width);
  useEffect(() => { setA(50); }, []);
  return <div>test</div>;
}
const array = new Array(2000); array.fill(1);
const Demo = () => {
  return array.map((n) => <Comp width={n} />);
};

export default Demo;

Current and expected behavior

「Flush all effects first before update state 」 这个机制存在循环调用的问题,setState 里会调 useEffect ,如果在 useEffect 内有 setState 调用,这个调用栈就是嵌套的,通过上述代码,会导致调用栈溢出,而 react 不会

image

Environment

build.json

No response

Possible solution

No response

Additional context

No response