【发布时间】:2020-08-09 19:59:56
【问题描述】:
今天,如果需要,我们可以将getDerivedStateFromProps 用于类组件,将state updates during render phase 用于 React Hooks/函数组件以创建派生状态。
我对 React Hook 变体特别好奇:这在 React 并发模式下是否允许?
如果我用StrictMode <React.StrictMode>...</React.StrictMode> 包装常见问题解答中的ScrollView 组件,则不会有任何警告。不过我还是有点胃口,这种模式在并发模式下可能会有问题。
所以问题是:
关于 Hooks 常见问题链接,在 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
}
【问题讨论】:
-
您好,为什么会有问题?请你能更好地表达一下是什么导致了你的轻微感觉吗?
-
在并发模式下,渲染可能会被中止并重新启动。我很好奇,如果这会导致问题,如果在这种情况下直接在渲染阶段更改状态。让我们假设,在我们设置状态之后重新启动渲染。这是一个有效的案例/ React 支持还是会导致不一致?
-
我认为函数调用阶段和渲染阶段是不同的(即使我们通常称它们为“渲染”),因此不会发生不一致
-
@NoriSte 谢谢,澄清一下:“函数调用阶段”是指调用
useState的设置器?我还添加了代码,所以每个人都可以谈论同一个例子。 -
谢谢!我的意思是“组件函数调用”,在你的例子中
Comp????
标签: reactjs react-hooks react-state-management getderivedstatefromprops react-concurrent