我正在使用 React Native 和 Redux 开发一个应用程序。我有一些由 Redux 处理的身份验证和本地化逻辑,现在我也想使用 Redux 从远程 API 获取所需的数据。
我的身份验证示例:
actions.auth.js
export function saveAuthToken(authToken) {
return {
type: "SAVE_AUTH_TOKEN",
authToken
};
}
...
reducers.auth.js
export function authToken(state = "", action) {
switch (action.type) {
case "SAVE_AUTH_TOKEN":
return action.authToken;
...
default:
return state;
}
}
我现在尝试添加的内容:
actions.data.js
export function fetchData() {
return {
type: "FETCH_DATA"
};
}
...
reducers.data.js
export function dataList(state = {}, action) {
switch (action.type) {
case "FETCH_DATA":
return {};
...
default:
return state
}
}
出于测试目的,我现在甚至不调用任何 API。无论如何,只需尝试返回 {}
即可获取数据。
尽管我认为我所做的一切都与我处理身份验证的方式相同(有效),但当我尝试调用时:
store.dispatch('FETCH_DATA');
我收到以下错误:
Error: Actions must be plain objects. Use custom middleware for async actions.
我不太明白我到底在哪里尝试使用异步操作以及为什么我的操作不是普通对象。 如有任何帮助,我们将不胜感激。
最佳答案
store.dispatch()接受action
作为参数。
而且,正如错误所述,action
必须是普通对象。
这个错误是显而易见的,因为
您传递给 dispatch()
的是一个 string
而不是 object
。
这是您想要执行的操作:
import { fetchData } from '<file-path-here>'
store.dispatch(fetchData())
你看,fetchData()
将返回一个 store.dispatch()
所需的普通对象
关于javascript - Action 必须是普通的对象,尽管看起来我的 Action 已经很普通了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59351433/