mobx可观察数组已更改,但渲染功能未重新运行

问题描述 投票:0回答:1
@observer
export class BookshelfComponent extends React.Component<{}, {}> {
  @observable
  libraryData: ILibraryBook[] = [{isSelected: false}, {isSelected: false}];

  bookItemPress(index: number) {
    this.libraryData[index].isSelected = !this.libraryData[index].isSelected;
  }

  render() {
    return (

        <FlatList
          data={this.libraryData.slice()}
          renderItem={this.renderItem}
          numColumns={3}/>

    );
  }

  renderItem = ({item, index}) => {
    return (
      <LibraryItemComponent
        bookLibraryItem={item}
        itemClick={() => {
          this.bookItemPress(index)
        }}
      />
    );
  }

}

当我按下一个平面列表项目来调用bookItemPress功能时,render功能不会再次运行;

但是当我将一个项目推送到libraryData时,效果很好!

谢谢!

react-native mobx
1个回答
0
投票

要更新@observable,您也可以

  1. 在功能上使用动作装饰器。
  @action.bound
  bookItemPress(index: number) {
    this.libraryData[index].isSelected = !this.libraryData[index].isSelected;
  }
  1. 使用runInAction
  bookItemPress(index: number) {
    runInAction(() => {
       this.libraryData[index].isSelected = !this.libraryData[index].isSelected;
    })
  }
© www.soinside.com 2019 - 2024. All rights reserved.