微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mobx不会重新渲染React组件

如何解决Mobx不会重新渲染React组件

我正在尝试遵循文档中的guide。这是我的组件:

import { observer } from 'mobx-react-lite';
import React from 'react';
import Footerviewmodel from './footerviewmodel';

const viewmodel = new Footerviewmodel();

const Footer = observer(() => {
    return (
        <footer>
            {viewmodel.content}
            <button onClick={viewmodel.onClick}>Button</button>
        </footer>
    );
});

export default Footer;

Footerviewmodel

import { action,observable } from 'mobx';

export default class Footerviewmodel {
    @observable
    public content = 'asdasdasd';

    @action
    public onClick = (): void => {
        this.content = '234';
        console.log(this.content);
    };
}

字段content可观察的onClick action ,而Footerobserver,应该。但是单击按钮不会调用组件的重新渲染。因此,content字段正在更改。

我在做什么错了?

解决方法

根据文档,您需要致电makeAutoObservable

import { action,makeAutoObservable} from 'mobx';

constructor() {
    makeAutoObservable(this)
}

https://stackblitz.com/edit/mobx-5pjrm9?file=index.js

使用可观察的装饰器:

https://stackblitz.com/edit/mobx-react-lite-jrzgzf?file=index.js

,

如果正在使用v6(并且应该使用),则需要显式启用装饰器。 由于您在tsconfig.json中使用TypeScript,因此需要启用以下编译器选项:

experimentalDecorators : true

useDefineForClassFields : true

docs

中的更多信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。