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

Mobx-react 没有渲染但状态改变了

如何解决Mobx-react 没有渲染但状态改变了

我决定尝试 Mobx 并面临组件对存储库中不断变化的字段缺乏响应的问题。我看了类似的主题,但我仍然不明白问题是什么。如果在更改后将属性值打印到控制台,您将看到实际结果。

index.js

import React from 'react';
import ReactDOM from 'react-dom';

import { Provider } from "mobx-react";
import AppStore from "./AppStore";

import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <Provider AppStore={AppStore}>
      <App />
    </Provider>
  </React.StrictMode>,document.getElementById('root')
);

App.js

import React,{ Component } from "react";
import { inject,observer } from "mobx-react";

@inject('AppStore')
@observer class App extends Component {
  render() {
    const { AppStore } = this.props;
    console.log(AppStore);
    return(
      <div className="App">
        { this.props.AppStore.counter }
        <hr/>
        <button onClick={this.props.AppStore.increment}>+</button>
        <button onClick={this.props.AppStore.decrement}>-</button>
      </div>
    )
  }
}

export default App;

AppStore.js

import { observable,action } from "mobx";

class AppStore {
  @observable counter = 0;
  @action increment = () => {
    this.counter = this.counter + 1;
    console.log(this.counter);
  }
  @action decrement = () => {
    this.counter = this.counter - 1;
    console.log(this.counter);
  }
}

const store = new AppStore();
export default store;

解决方法

Since mobx@6.0.0 decorators are not enough。您还必须使用 makeObservable 手动使您的班级可观察。

class AppStore {
  @observable counter = 0;

  constructor() {
    makeObservable(this);
  }

  @action increment = () => {
    this.counter = this.counter + 1;
  }
  @action decrement = () => {
    this.counter = this.counter - 1;
  }
}

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