我在我的项目中使用redux-toolkit,我遇到了这个问题
我创建了这个reducer:
setWaypointToEdit: (state, action: PayloadAction<WaypointToEditPayload>) => {
let gridPolygonsData: GridPolygonsData;
const { currentArea } = state.areas;
gridPolygonsData = {
...state.areas.gridPolygonsData,
};
gridPolygonsData[currentArea] = {
...gridPolygonsData[currentArea],
waypointToEdit: action.payload.waypoint,
};
state = {
...state,
areas: {
...state.areas,
gridPolygonsData,
},
}
},
字符串
有了这个有效载荷:
export interface WaypointToEditPayload {
waypoint: Waypoint | RequiredWaypoint | null;
}
型
但是当我尝试调度这个方法时,我得到了一个错误:
setWaypointToEdit(this.getWaypoint(areaNumber, waypointId))
型
x1c 0d1x的数据
这就是上面的方法所做的
private getWaypoint(areaNumber: number, waypointId: number) {
const {
areas: { gridPolygonsData }
} = useAppSelector((state) => state.project);
const waypoints = gridPolygonsData[areaNumber].gridWaypoints;
if (waypoints)
return waypoints.find((waypoint) => waypoint.id === waypointId) ?? null;
return null;
型
}
即使返回两种类型:Waypoint或null,仍然有这个错误。有人可以帮助我吗?谢谢。
3条答案
按热度按时间bqjvbblv1#
你的reducer需要一个对象。要么在一个带有属性waypoint的对象中发送waypoint:
字符串
或者更改预期类型:
型
在这种情况下,您需要更改减速器的这一部分:
型
xjreopfe2#
您可以按以下方式定义接口。
字符串
所以reducer可以接受
{waypoint: Waypoint | RequiredWaypoint | null}
,但是getWaypoint
函数可能只返回null
而不是{waypoint: null}
。你只需要修复函数在需要返回
null
时返回{waypoint: null}
。daupos2t3#
再加上其他的答案,你当前的reducer什么也不做。重新分配
state
变量并没有 * 改变 *state
中的对象。它扔掉了旧的对象,但没有修改它,所以改变不会以任何方式反映出来。你有两个选择:
使用return代替
state =
字符串
或者只是修改对象(在Redux Toolkit中,这是首选方法):
型