Return 在 REDUX Reducer React Native 中承诺 { "_U": 0, "_V": 0, "_W": null, "_X": null, }

Return Promise { "_U": 0, "_V": 0, "_W": null, "_X": null, } in REDUX Reducer React Native

这是我使用 REDUX 的代码:

ApiChartingReducer.js

    const ApiChartingMenuInitial = {
        apiData: []
    };
    
    export const ApiChartingMenuReducer = (state = ApiChartingMenuInitial, action) => {      
        switch (action.type) {
            case GET_MENU_CHART:                    
                 const getData = async () => {                             
                    try {
                        const response = await ApiChartingAxios.get('/ApiChartingMenu',{
                            params: null
                        });          
                        console.log(response.data.Data) // Data Exists
                        return response.data.Data;
                    } catch (error) {
                        console.log(error);
                    }                
                    return response.data.Data;                
                };    
                            
                console.log(getData());  // data not exists            
                // return {...state, apiData: getData()}
                
            default: 
                return state;
        }    
    };

在这一行中:

console.log(response.data.Data) // Data Exists

但在这一行中:

console.log(getData()); // Data not exists

和return:

    Promise {
      "_U": 0,
      "_V": 0,
      "_W": null,
      "_X": null,
    }

我无法在我的 redux reducer 文件中使用 useState。那么如何在 getData() 中获取我的响应数据?

在 Redux reducer 中,不允许执行任何异步代码。

Redux reducer 必须是没有副作用的纯函数。

通常在 Redux 中,您会在 Redux 之外或在像 thunk 这样的中间件中进行抓取,然后使用加载的数据分派一个动作,然后在 reducer 中进行处理。

总的来说:你在这里写的是一种非常过时的 Redux 风格。自 2019 年以来,推荐的 Redux 风格不使用 switch..case reducers,ACTION_TYPES,immutable reducer logic,createStore 或 connect/mapStateToProps。您很可能正在关注过时的文档。新样式只有代码的1/4,少了很多error-prone.

我建议您遵循 the official Redux "Essentials" tutorial,它将教您新的风格,并在第 5、7 和 8 章中介绍不同的数据获取方法。

如果你坚持要继续学习这种旧的 Redux 风格,你也可以看看 Redux Fundamentals 教程,它展示了旧的风格来解释 Redux 的一些内部结构,对于那些正在学习的人对此感兴趣。第 6 章是关于数据获取的。