reactjs - 通过 json-server 中获取的数据进行映射,不包括 id
问题描述
我正在构建一个非常简单的反应应用程序,它使用json-server
和axios
,允许我创建新记录。我将响应存储在状态中,并在发布新数据时映射数据。非常坦率的。我有一个减速器,并通过以下方式将数据传递给我的组件useContext
:
const stageRaceReducer = (state: State, action: any) => {
switch (action.type) {
case ACTIONS.FETCH_SUCCESS:
return {
...state,
loading: false,
stageRaces: action.payload,
};
case ACTIONS.ADD_STAGE_RACE:
return {
...state,
modalOpen: false,
stageRaces: [...state.stageRaces, action.stageRace],
};
default:
return state;
}
};
const StageRaceContext = createContext({} as IStageRaceContext);
export const useStore = () => useContext(StageRaceContext);
中的数据state.stageRaces
如下所示:
{
"stage-races": [
{
"name": "Older",
"stages": [
{
"id": "koib67vk",
"name": "Stage 1",
"date": "2021-05-19"
}
],
"id": 1
}
]
}
在我的主要组件中,我state.stageRaces
像这样映射:
{state.stageRaces.length === 0
? "No stage races"
: state.stageRaces.map((stageRace: IStageRace) => {
return (
<StageRaceListGroupItem
name={stageRace.name}
date={getEarliestDate(stageRace.stages)}
key={`stage-race-${stageRace.id}`}
id={stageRace.id}
duration={getDuration(stageRace.stages)}
onDelete={() => handleDeleteStageRace(stageRace.id)}
/>
);
})}
这是我遇到的问题。当我添加一个新项目时state.stageRaces
,它来自初始状态:
const initialStageRaceState = {
name: "",
stages: [] as IStage[],
};
并且该数据通过axios
.post
请求发布到服务器,我看到id
为每条记录创建了一个。但是,当我查看控制台以查看添加到 my 的新项目时,除非我刷新页面,否则state.stageRaces.map
该id
字段实际上并没有被传递,因此 my和id
正在key
返回undefined
。<StageListGroupItem />
在我看来,由于状态正在更新,因此应该正确获取数据,但我终其一生都无法弄清楚为什么不正确。有什么建议么?
解决方案
推荐阅读
- node.js - Cookie 未从响应传递到下一个请求
- java - 如何从对象列表中正确删除对象
- azure-pipelines - 哪个 azure-pipelines.yml 在构建验证中运行
- javascript - 如何使用 Vanilla JS 拖放 select -option 元素
- amazon-web-services - 如何使用 AWS 的 HTTP API 执行发布请求?
- javascript - 电子邮件验证不适用于 Firebase 电子邮件自定义操作处理程序
- javascript - 如何根据不和谐消息更改变量?
- python - 是否有一种矢量化的方法可以从索引最接近列表中数据的 pd.DataFrame 中获取数据?
- bash - 关闭 ssh 后后台进程不起作用
- python - 通过 SSH 隧道连接到 MySQL | MySQL 连接不可用