今天,如果需要,我们可以在React Hooks/函数组件的渲染阶段使用getDerivedStateFromProps
进行类组件和状态更新,以创建派生状态。
我对React Hook变体特别好奇:这在React并发模式下会被允许吗?
如果我用StrictMode<React.StrictMode>...</React.StrictMode>
包装FAQ中的ScrollView
组件,则不会出现警告。然而,我仍然有轻微的胃部感觉,这种模式可能会对并发模式产生问题。
所以问题是:
关于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
}
这是安全的,但您只能更新此组件的状态,直到在渲染过程中对其他组件没有副作用为止。在反应16.13.0中添加了关于此的警告。
react 16.13.0发布说明:
渲染期间某些更新的警告React组件不应
在渲染过程中会在其他组件中造成副作用。
支持在渲染期间调用setState,但仅适用于组成部分如果在其他组件,您现在将看到一个警告:
Warning: Cannot update a component from inside the function body of a different component.