javascript - useReducer 返回一个 promise 而不是更新的状态

标签 javascript reactjs react-hooks use-reducer

我的 reducer :

export const initialUserState = {
    username: '',
    address: '',
    token: '',
    address: '',
    loggedIn: false,
    loaded: false,
};

export const userReducer = async (state, action) => {
    try {
        switch (action.type) {
            case 'LOAD':
                try {
                    const value = JSON.parse(await AsyncStorage.getItem('user_info'));
                    const newState = { ...state, ...value, loggedIn: true, loaded: true };
                    console.log('New State:', newState);

                    if (value !== null) {
                        return newState;
                    }
                } catch (error) {
                    return { ...state, loaded: true };
                }
                break;
            default:
                return state;
        }
    } catch (error) {
        console.log(error);
        return state;
    }
};

我的 App.js:
import { userReducer, initialUserState } from './reducer';

const App = () => {
    const [user, dispatch] = useReducer(userReducer, initialUserState);

    useEffect(() => {
        dispatch({ type: 'LOAD', ready: setReady });
    }, []);

    useEffect(() => {
        console.log('state user:', user);
    }, [user]);
}

export default App;

发生的情况是,在 App.js 中,在调用第二个 useEffect 之后,状态更新并且 用户 返回一个 promise 。 promise 有多个属性,其中之一是它应该返回的正确状态。它不应该返回状态吗?难道我做错了什么?

简而言之:

1) 应用程序启动

2)useEffect第一次调用,初始状态正确

3)我调用将更新状态的 LOAD 操作

4) useEffect 被第二次调用。这次它返回一个 promise ,它应该只返回商店的更新状态,我猜?

Console

最佳答案

看起来像你传递给 useReducer 的函数是 async .全部 async函数返回一个 promise 。您需要await或使用 .then从 Promise 中获取值的语法。这不是第一次通过的 promise ,因为它返回初始状态。希望有帮助!

关于javascript - useReducer 返回一个 promise 而不是更新的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61261658/

相关文章:

javascript - 从位于父组件中的组件调用属于子组件的方法

reactjs - 如何将函数指定为具有默认值的 Hook 的可选参数

javascript - jQuery 选择器 - 查找没有指定属性的对象

javascript - React-Router npm 包在控制台中给我警告? (不推荐使用 PropTypes)

drag-and-drop - 拖放并支持react.js 的触摸

javascript - 如何在用于状态的对象中删除和添加数组元素?

react-native - 有没有什么方法可以用 React Native ScrollView onScroll 钩子(Hook)来制作动画?

reactjs - 在 React hooks 中,即使不调用 set state,组件也能工作

javascript - react 错误 : react/jsx-no-undef by react-bootstrap

javascript - Ember JS,将输入标签值作为操作 handle 中的参数传递