应用程序的状态不会通过 React、MobX 中的 props 在代码中立即更新
The state of the application is not updated instantly in the code via props in React, MobX
如果我有这样的代码
<button onClick = {()=>{
store.increment()
console.log(store.count)
}
}>{store.count}</button>
然后当你点击按钮时,计数器就会更新,并且计数器已经在控制台中更新了。
但是如果你创建一个接受数量和回调的计数器组件,状态将是异步的
<Counter count = {store.count} increment = {store.increment}/>
如何确保控制台中的状态已经更新。如果可能,没有 didUpdate 方法和更新挂钩
codesandbox https://codesandbox.io/s/mobx-counter-example-forked-v3qcrw?file=/src/index.js
首先:不要使用过时的库版本。更新到最新的。
其次:将observable
api改为makeAutoObservable
,去掉多余的actions
.
第三:将每个使用可观察值的组件包装到 observer
HOC 中。在您的示例中,您包装了 Counter
,但 Counter 实际上不使用任何可观察值,它仅将 appState.count
作为道具获取,当您引用它时,它将成为原始值。然后你直接把Counter传给ReactDOM.render,那不行。
我用 App
组件包装了它:
const App = observer(() => {
return <Counter count={appState.count} increment={appState.incCounter} />;
});
这是 Codesandbox 的工作代码
如果我有这样的代码
<button onClick = {()=>{
store.increment()
console.log(store.count)
}
}>{store.count}</button>
然后当你点击按钮时,计数器就会更新,并且计数器已经在控制台中更新了。 但是如果你创建一个接受数量和回调的计数器组件,状态将是异步的
<Counter count = {store.count} increment = {store.increment}/>
如何确保控制台中的状态已经更新。如果可能,没有 didUpdate 方法和更新挂钩
codesandbox https://codesandbox.io/s/mobx-counter-example-forked-v3qcrw?file=/src/index.js
首先:不要使用过时的库版本。更新到最新的。
其次:将observable
api改为makeAutoObservable
,去掉多余的actions
.
第三:将每个使用可观察值的组件包装到 observer
HOC 中。在您的示例中,您包装了 Counter
,但 Counter 实际上不使用任何可观察值,它仅将 appState.count
作为道具获取,当您引用它时,它将成为原始值。然后你直接把Counter传给ReactDOM.render,那不行。
我用 App
组件包装了它:
const App = observer(() => {
return <Counter count={appState.count} increment={appState.incCounter} />;
});
这是 Codesandbox 的工作代码