当我设置 observable 时,mobx-react observer 不会触发
mobx-react observer don't fires when I set observable
我正在尝试使用 mobx 和打字稿创建一个 React 应用程序。但是没用。
我希望计时器能计时。我看到事件发生并更新了计数器。但是组件没有重新渲染。我做错了什么?
import React from "react";
import { observable, action } from "mobx";
import { observer, inject, Provider } from "mobx-react";
export class TestStore {
@observable timer = 0;
@action timerInc = () => {
this.timer += 1;
};
}
interface IPropsTestComp {
TestStore?: TestStore;
}
@inject("TestStore")
@observer
export class TestComp extends React.Component<IPropsTestComp> {
constructor(props: IPropsTestComp) {
super(props);
setInterval(() => {
this.props.TestStore!.timerInc();
}, 1000);
}
render() {
return <div>{this.props.TestStore!.timer}</div>;
}
}
export class TestApp extends React.Component {
render() {
return <Provider TestStore={new TestStore()}>
<TestComp />
</Provider>
}
}
你在使用 MobX 6 吗?
Decorator API 与 MobX 5 相比有一点变化,现在您需要在构造函数中使用 makeObservable
方法来实现与以前相同的功能:
import { observable, action, makeObservable } from "mobx";
export class TestStore {
@observable timer = 0;
constructor() {
makeObservable(this);
}
@action timerInc = () => {
this.timer += 1;
};
}
虽然有新的东西可能会让你完全放弃装饰器,makeAutoObservable
:
import { makeAutoObservable } from "mobx";
export class TestStore {
timer = 0;
constructor() {
// Don't need decorators now, just this call
makeAutoObservable(this);
}
timerInc = () => {
this.timer += 1;
};
}
我正在尝试使用 mobx 和打字稿创建一个 React 应用程序。但是没用。
我希望计时器能计时。我看到事件发生并更新了计数器。但是组件没有重新渲染。我做错了什么?
import React from "react";
import { observable, action } from "mobx";
import { observer, inject, Provider } from "mobx-react";
export class TestStore {
@observable timer = 0;
@action timerInc = () => {
this.timer += 1;
};
}
interface IPropsTestComp {
TestStore?: TestStore;
}
@inject("TestStore")
@observer
export class TestComp extends React.Component<IPropsTestComp> {
constructor(props: IPropsTestComp) {
super(props);
setInterval(() => {
this.props.TestStore!.timerInc();
}, 1000);
}
render() {
return <div>{this.props.TestStore!.timer}</div>;
}
}
export class TestApp extends React.Component {
render() {
return <Provider TestStore={new TestStore()}>
<TestComp />
</Provider>
}
}
你在使用 MobX 6 吗?
Decorator API 与 MobX 5 相比有一点变化,现在您需要在构造函数中使用 makeObservable
方法来实现与以前相同的功能:
import { observable, action, makeObservable } from "mobx";
export class TestStore {
@observable timer = 0;
constructor() {
makeObservable(this);
}
@action timerInc = () => {
this.timer += 1;
};
}
虽然有新的东西可能会让你完全放弃装饰器,makeAutoObservable
:
import { makeAutoObservable } from "mobx";
export class TestStore {
timer = 0;
constructor() {
// Don't need decorators now, just this call
makeAutoObservable(this);
}
timerInc = () => {
this.timer += 1;
};
}