javascript - Action 必须是普通的对象,尽管看起来我的 Action 已经很普通了

标签 javascript react-native redux

我正在使用 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/

相关文章:

javascript - 在 JSX : why does calling a function without the () work? 中调用 javascript 函数

react-native - 使用没有标题的 react 导航

javascript - 如何在 redux 工具包中将参数传递给 createAsyncThunk?

reactjs - 将容器组件嵌套在演示组件中

第三方页面上的 JavaScript 注入(inject)

javascript - javascript中的密封方法

javascript - array_search 在 javascript 中递归

javascript - 无法从 react 导航获得基本示例以正常工作

javascript - 如何使用 MUI Texfield 和 Redux 更改状态

javascript - 我如何在 Ember.Router 中设置 ApplicationController