【发布时间】:2020-04-16 23:16:38
【问题描述】:
我的减速机:
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 之后,状态会更新并且 user 返回一个 Promise。承诺有多个属性,其中一个是它应该返回的正确状态。它不应该返回状态吗?我做错了吗?
简而言之:
1) 应用启动
2) useEffect 首次调用并具有正确的初始状态
3) 我调用 LOAD 动作来更新状态
4) useEffect 被第二次调用。这次它返回了一个 promise,我猜它应该只返回 store 的更新状态?
【问题讨论】:
-
您将使用 redux-thunk 进行异步操作并将您的请求移动到操作创建者 github.com/reduxjs/redux-thunk
-
所以这个问题是在问 React Hooks 的“reducers”而不是 redux,对吧?你可以使用 redux-thunk 和 react hooks 吗?
标签: javascript reactjs react-hooks use-reducer