0

今天,如果需要,我们可以在 React Hooks/函数组件的渲染阶段getDerivedStateFromProps使用类组件和状态更新来创建派生状态。

我对 React Hook 变体特别好奇:这在 React 并发模式下是否允许?

如果我使用StrictModeScrollView包装常见问题解答中的组件,则不会有任何警告。但是,我还是有一点胃疼的感觉,这种模式在并发模式下可能会出现问题。 <React.StrictMode>...</React.StrictMode>

所以问题是:

关于 Hooks FAQ 链接,在 React 并发模式下是否仍然可以派生状态?


例子:

function Comp( {someCond} ) {
  const [counter, setCounter] = useState(0);

  if (someCond) {
    // we are setting derived state directly in render (see FAQ).
    setCounter(prev => prev + 1);
    // <-- imagine, at this point React aborts this render (and restarts later)
    // Does it lead to inconsistencies?
  }

  // ... return some jsx
}
4

1 回答 1

0

它是安全的,但是您只能更新此组件的状态,直到在渲染期间对其他组件没有副作用。在反应 16.13.0 中添加了一个警告。

反应 16.13.0发行说明

渲染期间某些更新的警告 React 组件不应该

在渲染过程中对其他组件造成副作用。

支持在渲染过程中调用 setState,但仅限于同一个组件。如果您在渲染不同组件的过程中调用 setState,您现在将看到一个警告:

Warning: Cannot update a component from inside the function body of a different component.
于 2020-08-28T01:44:59.133 回答