Redux TS 错误操作必须是普通对象。相反,实际类型是:'Promise'
Redux TS Error Actions must be plain objects. Instead, the actual type was: 'Promise'
我在使用 TS 和 Redux 时遇到此错误,无法弄清楚为什么会发生以及如何修复它。
我正在使用 redux thunk 中间件。
Redux TS 错误操作必须是普通对象。相反,实际类型是:'Promise'.
似乎问题开始出现在 updateUserSession(data)
以这种方式开始:
insertUserSession(data)
.then(
(res: IUserSession) => {
updateUserSession(data)
},
err => {
console.error("Insert session failed", err)
},
)
.then(() => {
//Here will continue another async action
})
export const insertUserSession = (session: IUserSession): Promise<IUserSession> => {
return axios.post("/user/" + session?.userId + "/session", session)
}
export const updateUserSession = (data: IUserSession) => {
return axios.put('/user/' + data.userId + '/session', data)
.then(
(response) => {
fetchUserSession(store.getState().user?.userData?.username)
.then(
(res) => {
if (typeof res.data === "object" && !Object.keys(res.data).length)
saveUserSession(res.data)
},
(err) => {
console.error(err);
},
)
},
(err) => {
console.error(err);
},
)
}
export const saveUserSession = (data: IUserSession) => {
return (dispatch: Dispatch<UserAction>) => {
dispatch({
type: UserType.SAVE_USER_SESSION,
payload: data,
});
}
}
这是因为 updateUserSession
实际上是一个 thunk 而不是一个动作。看来 saveUserSession
是您需要使用回调数据调用的操作。
务必声明正确的 thunk 签名:
const updateUserSession = (data: IUserSession) => (dispatch, getState) => {}
此外,不要忘记调用 dispatch
以触发 thunk 中的动作。
我在使用 TS 和 Redux 时遇到此错误,无法弄清楚为什么会发生以及如何修复它。 我正在使用 redux thunk 中间件。 Redux TS 错误操作必须是普通对象。相反,实际类型是:'Promise'.
似乎问题开始出现在 updateUserSession(data)
以这种方式开始:
insertUserSession(data)
.then(
(res: IUserSession) => {
updateUserSession(data)
},
err => {
console.error("Insert session failed", err)
},
)
.then(() => {
//Here will continue another async action
})
export const insertUserSession = (session: IUserSession): Promise<IUserSession> => {
return axios.post("/user/" + session?.userId + "/session", session)
}
export const updateUserSession = (data: IUserSession) => {
return axios.put('/user/' + data.userId + '/session', data)
.then(
(response) => {
fetchUserSession(store.getState().user?.userData?.username)
.then(
(res) => {
if (typeof res.data === "object" && !Object.keys(res.data).length)
saveUserSession(res.data)
},
(err) => {
console.error(err);
},
)
},
(err) => {
console.error(err);
},
)
}
export const saveUserSession = (data: IUserSession) => {
return (dispatch: Dispatch<UserAction>) => {
dispatch({
type: UserType.SAVE_USER_SESSION,
payload: data,
});
}
}
这是因为 updateUserSession
实际上是一个 thunk 而不是一个动作。看来 saveUserSession
是您需要使用回调数据调用的操作。
务必声明正确的 thunk 签名:
const updateUserSession = (data: IUserSession) => (dispatch, getState) => {}
此外,不要忘记调用 dispatch
以触发 thunk 中的动作。