我的 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 ,它应该只返回商店的更新状态,我猜?
最佳答案
看起来像你传递给 useReducer
的函数是 async
.全部 async
函数返回一个 promise 。您需要await
或使用 .then
从 Promise 中获取值的语法。这不是第一次通过的 promise ,因为它返回初始状态。希望有帮助!
关于javascript - useReducer 返回一个 promise 而不是更新的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61261658/