【问题标题】:MobX ReactJS AntD updates won't re-renderMobX ReactJS AntD 更新不会重新渲染
【发布时间】:2020-10-23 16:30:59
【问题描述】:

所以我正在尝试使用 ReactJS 和 MobX 更改我的 AntD 表中的一些表数据。我的 MobX observable 中的数据发生了变化,但表格不会重新呈现更新,直到我说......调整页面大小并且表格重新呈现。我在 CodeSandbox 上重新创建了我的问题 - 它不是确切的数据类型,但这是我遇到的确切问题,有什么想法吗???

https://codesandbox.io/s/remove-items-from-mobx-array-forked-3nybr?file=/index.js

  @action
  change = (key) => {
    this.data
      .filter(item => key === item.key)
      .forEach(piece => {
        piece.key = 10;
      });
    console.log(this.data);
  };
const FooTable = () => {
  const columns = [
    {
      title: "ID",
      dataIndex: "key"
    },
    {
      title: "Name",
      dataIndex: "name"
    },
    {
      title: "Last Name",
      dataIndex: "lastName"
    },
    {
      title: "Actions",
      render: (text, record) => {
        return (
          <Button
            type="link"
            icon="delete"
            onClick={() => tableStore.change(record.key)}
          >
            Delete
          </Button>
        );
      }
    }
  ];
  return useObserver(() => {
    return <Table columns={columns} dataSource={tableStore.data} />;
  });
};

【问题讨论】:

    标签: reactjs mobx mobx-react react-state-management


    【解决方案1】:

    因为 AntD Table 本身不是观察者,所以在将数据传递给 AntD 之前,您需要在数据上使用 toJS。

    import { toJS } from "mobx";
    
    // ...
    
    const FooTable = () => {
      const columns = [ ... ];
    
      return useObserver(() => {
        return <Table columns={columns} dataSource={toJS(tableStore.data)} />;
      });
    };
    
    

    【讨论】:

    • 感谢您的帮助。 toJS 将需要传递给读取此数据的任何其他组件,对吗?说一个表单或任何其他将使用我的 MobX observable 作为数据源的组件?
    • 只有不使用 useObserver 或 observer 装饰器的组件。基本上大部分第三方组件,比如AntD table等等。您可以先尝试不使用它,如果它不起作用,请使用toJS。稍后你会知道哪些有效,哪些无效
    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2021-02-25
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多