Список MOBX обновлен, но повторное рендеринг не работает - PullRequest
0 голосов
/ 29 марта 2019

"mobx-реагировать": "^ 5.3.6", "реагировать": "^ 16.6.3", "antd": "^ 3.10.3",

я использую mobx-реагировать, наблюдать объект-список. Значение в списке было изменено, но страница не перерисовывалась

структура данных

список = [{id: 1 статус: 1, ...}]

работал

this.items.replace(this.items);

не работал

 @observable.deep items = [];

@observer
class TableList extends Component {
  @observable items = [];//my list
...

  toggleOnline(data) {
    const { id, status } = data;
    const temp_status = status == 2 ? 1 : 2;
    ajax.post('page/switch', {
      id, status: temp_status
    }).then(action(() => {

      data.status = temp_status;
      message.success('操作成功');
    })).catch(err => {
      message.error(err);
    });
  }


render(){


 return

...
 <aonClick={this.toggleOnline.bind(this, record)}>{record.status == 2 || record.status == -1 ? '启用' : '停用'}</a>

...

 <Table
              rowKey="id"
              loading={loading}
              dataSource={this.items.toJS()}
              columns={this.columns}
              onChange={this.handleStandardTableChange}
            />

}

}

1 Ответ

0 голосов
/ 30 марта 2019

Прочитайте это: На что реагирует MobX?

раздел: Incorrect: store a local reference to an observable object without tracking

const author = message.author;
autorun(() => {
    console.log(author.name)
})
message.author.name = "Sara";
message.author = { name: "John" };

Первое изменение будет получено, сообщение. Автор и автор тот же объект, и свойство .name разыменовывается в автозапуске. Однако второе изменение не будет принято, сообщение .author отношение не отслеживается автозапуском. Автозапуск все еще использует "старый" автор.

Вы не должны переназначать наблюдаемые переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...