繁体   English   中英

使用带有 React 的生成器 function 的奇怪行为

[英]Weird behavior using a generator function with React

下面是我的精简组件。 它有一个生成器 function 应该循环遍历值。

const App = () => {
  const [state, setState] = useState("1")

  function* stateSwitch () {
    while (true){
      yield "2"
      yield "3"
      yield "1"
    }
  }

  const stateSwitcher = stateSwitch()

  const handleClick = event => {
    event.preventDefault()
    console.log(stateSwitcher.next().value)
    setState(stateSwitcher.next().value)
  }

  return (
    <div className="App">
      <button onClick = {handleClick}>{state}</button>
    </div>
  );
}

这种行为很奇怪。 获取按钮上显示的新值需要单击一次,然后单击两次,然后再次单击一次,以此类推。 state 有时为“3”,但只有“1”和“2”被记录。

我不明白这是怎么发生的,我想它与我还不知道的 React 组件生命周期有关。 有人能帮我吗?

console.log(stateSwitcher.next().value)setState(stateSwitcher.next().value)中的一个或另一个正在消耗产量之一。

生成器也在每个渲染周期重新定义。

试试吧

function* stateSwitch() {
  while (true) {
    yield "2";
    yield "3";
    yield "1";
  }
}

const stateSwitcher = stateSwitch();

export default function App() {
  const [state, setState] = useState("1");

  const handleClick = (event) => {
    event.preventDefault();
    const value = stateSwitcher.next().value;
    console.log(value);
    setState(value);
  };

  return (
    <div className="App">
      <button onClick={handleClick}>{state}</button>
    </div>
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM