Mobx 观察观察数组中对象的 属性

Mobx observe property of object in observe array

我有2个class:

class Account {
  games: Game[];
}

class Game {
  id: number;
  active: boolean;
}

以及可观察的帐户数组。

我需要在游戏中使用复选框更改 属性 active。但是当我更改 active 时,我的反应组件不会更新。

interface GameListProps {
  games: Game[];
}

@observer
class GameList extends Component<GameListProps> {
  render() {
    return (
      <div>
        {Array.map((game) => (
          <div>
            <input
              type="checkbox"
              checked={game.active}
              onChange={(event) => {
                game.active = event.target.checked;
              }}
            />
          </div>
        ))}
      </div>
    );
  }
}

如何通过更新 React 组件来更改 active

我可以创建一系列 checed 游戏,但将 active 用于 checked 吗?

@observer
class GameList extends Component<GameListProps> {
  @ovservable checkedGames: number[];

  handleCheck(gameId: number, checked: boolean) {
    this.props.games.find((game) => game.id === gameId).active = cheched;
    if (checked) {
      this.checkedGames.push(gameId);
    } else {
      let findIndex = this.checkedGames.indexOf(gameId);
      if (findIndex !== -1) {
        this.checkedGames.splice(this.checkedGames.indexOf(gameId), 1);
      }
    }
  }

  render() {
    return (
      <div>
        {Array.map((game) => (
          <div>
            <input
              type="checkbox"
              checked={game.active}
              onChange={(event) => {
                this.handleCheck(game.id, event.target.checked);
              }}
            />
          </div>
        ))}
      </div>
    );
  }
}

我觉得不好,因为我们改了props。但是我们需要游戏 属性 active 作为复选框的初始状态。

您应该在 Game class 上将 active 属性 标记为可观察。

class Game {
  id: number;
  @observable active: boolean;
  // --^
}