React/Mobx 将可观察数组映射到组件

React/Mobx mapping observable array to components

我一直在尝试映射数组以显示每个条目的组件。这是我目前正在做的事情,

这是我的 RankStore;

const RankStore = observable({
loading: false,
error: "",
rank: {} as RankInfo,

LoadRank() {
    this.loading = true;
    this.error = "";

    GetRankInfo()
    .then(action((json:any) => {
        this.rank = json.rankDetails;
        console.log(json)
        this.loading = false;
    }))
    .catch(action((error: any) => {
        this.error = error.message;
        this.loading = false;
    }));
}
});

export default RankStore;

在这个可观察的 RankStore 中,我正在加载从 API 获取的排名,并将其设置为 'rank',这是我的模型 RankInfo 的数组,如下所示;

interface RankInfo {
serviceNumber: string
capBadge: string
endDate: string
equivalentNatoRank: string
mainTrade: string
regtCorps: string
seniorityDate: string
actingPaidRank: string
startDate: string
substantiveRank: string
}

export default RankInfo;

从 API 收到的信息看起来是这样;

通常,要在组件中显示它,我会让组件成为一个观察者并简单地调用 {RankStore.rank.serviceNumber} 这适用于我的其他商店但不适用于这个商店,因为数据是一个包含两个的数组项目。我试图将每个数组映射到一个组件,因此对于每个数组,它显示一个组件,例如 <h1> {RankStore.rank.serviceNumber} </h1> 在这种情况下,它将呈现两个组件,显示各自的服务编号。

以前我也是这样做的;

          {this.state.tickets.map((ticket) => (
            <text key={ticket.id} value={ticket.id}>
              {ticket.ticketApplication.firstName}{" "}
              {ticket.ticketApplication.lastName}
            </text>
      ))}

但是,每当我尝试映射 {RankStore.rank} 时,我总是得到“'rank' 中不存在 MAP”。使用 MOBX 将数组映射到组件的正确方法是什么?

看来您最初是将 rank 字段设置为对象,然后在 API 调用后将其更改为数组。当 rank 是一个对象时,它上面没有 map 函数 属性。 所以,而不是:

rank: {} as RankInfo

这样做:

rank: [] as RankInfo[]

初始化为 RankInfo 类型的空数组。