观察者不使用 useLocalObservable
Observer not working with useLocalObservable
import { Observer, useLocalObservable } from 'mobx-react-lite';
function App() {
const { count, decrement, increment } = useLocalObservable(() => ({
count: 0,
increment() { this.count++ },
decrement() { this.count-- },
}));
return (
<div>
<Observer>{() => (<div>{count}</div>)}</Observer>
<button onClick={() => { decrement() }} >decrement</button>
<button onClick={() => { increment() }} >increment</button>
</div>
);
}
Observer 无法使用 useLocalObservable.when 我点击按钮没有任何更新。是什么原因?
Observer
跟踪在其中取消引用的所有可观察数据,并在可观察数据发生变化时 re-renders。当您从 Observer
外部的可观察对象中取消引用 count
时,从那一点开始它只是一个常规的 JavaScript 数字,因此 Observer
没有任何东西可以跟踪。
您可以改为在 Observer
中取消引用它,它会起作用:
import { Observer, useLocalObservable } from 'mobx-react-lite';
function App() {
const state = useLocalObservable(() => ({
count: 0,
increment() { state.count++ },
decrement() { state.count-- },
}));
return (
<div>
<Observer>{() => <div>{state.count}</div>}</Observer>
<button onClick={state.decrement}>decrement</button>
<button onClick={state.increment}>increment</button>
</div>
);
}
import { Observer, useLocalObservable } from 'mobx-react-lite';
function App() {
const { count, decrement, increment } = useLocalObservable(() => ({
count: 0,
increment() { this.count++ },
decrement() { this.count-- },
}));
return (
<div>
<Observer>{() => (<div>{count}</div>)}</Observer>
<button onClick={() => { decrement() }} >decrement</button>
<button onClick={() => { increment() }} >increment</button>
</div>
);
}
Observer 无法使用 useLocalObservable.when 我点击按钮没有任何更新。是什么原因?
Observer
跟踪在其中取消引用的所有可观察数据,并在可观察数据发生变化时 re-renders。当您从 Observer
外部的可观察对象中取消引用 count
时,从那一点开始它只是一个常规的 JavaScript 数字,因此 Observer
没有任何东西可以跟踪。
您可以改为在 Observer
中取消引用它,它会起作用:
import { Observer, useLocalObservable } from 'mobx-react-lite';
function App() {
const state = useLocalObservable(() => ({
count: 0,
increment() { state.count++ },
decrement() { state.count-- },
}));
return (
<div>
<Observer>{() => <div>{state.count}</div>}</Observer>
<button onClick={state.decrement}>decrement</button>
<button onClick={state.increment}>increment</button>
</div>
);
}