反应 MOBX 组件渲染

React MOBX Component Render

我刚刚关闭 this.setState 以使用 mobx observable,因为我有多个获取数据的 GET 请求。这可以防止每次调用 this.setState 时重新呈现 PieChart

但是,现在子组件不会重新呈现,而是保留在初始占位符 mobxState 中。当数据来自 API.

时,如何让 PieChart 子组件重新呈现
class Device extends React.Component {
  mobxState = {
    customOptions: [],
    rowData: []
  };

  //mount data
  componentDidMount() {
    //call the data loader
    this.fetchData();
  }

  fetchData = () => {
    axios
      .get("/custom_options.json")
      .then(response => {
        this.mobxState.customOptions = response.data.custom_options;
      })
      .then(
        //data for PieChart, need this portion to render the PieChart
        axios.get("/devices.json").then(response => {
          this.mobxState.rowData = response;
        })
      );
  };

  render() {
    return <PieChart data={this.mobxState.rowData} />;
  }
}

decorate(Device, {
  mobxState: observable
});

export default Device;

您需要确保您的 Device 组件是 observer, and if you are using a MobX version below 5 you have to slice() or peek() 渲染方法中的数组。

import { observer } from "mobx-react";

class Device extends React.Component {
  // ...

  render() {
    return <PieChart data={this.mobxState.rowData.slice()} />;
  }
}

decorate(Device, {
  mobxState: observable
});

export default observer(Device);