我正在從本地存盤獲取資料并想調度一個 redux 函式。但我認為該操作不是try block在函式中呼叫。
在還原
export function testLogin(loginStatus) {
return async dispatch => {
try {
alert('me here')
dispatch({
type: TEST_LOGIN_STATUS,
payload: loginStatus,
});
} catch (error) {
console.log('not logged in');
}
};
}
export const authReducer = (state = initialState, action) => {
switch (action.type) {
case LOGGED_IN:
return {...state, token: action.payload, loggedIn: true};
case TEST_LOGIN_STATUS:
return {...state, loggedIn: action.payload};
default:
return state;
}
};
如您所見,我將狀態作為testLogin動作功能的引數。
這是我在主螢屏中所做的。當用戶打開應用程式時。我需要測驗,如果用戶登錄或不通過檢查local storage
useEffect(() => {
async function getStorageValue() {
let value;
try {
value = await AsyncStorage.getItem('isLoggedIn');
if (value === 'true') {
dispatch(testLogin(true));
} else {
dispatch(testLogin(false));
}
} catch (e) {
// handle here
} finally {
}
}
getStorageValue();
}, []);
由于Async storage僅strings在測驗值時接受并回傳 true 或 false。
即使我已登錄,事情也是如此。當我檢查 redux 時,loginStatus我總是logged out. 調度功能有什么問題嗎?
uj5u.com熱心網友回復:
看起來testLogin是一個高階函式。即它回傳一個接受 dispatch 作為引數的函式。
在您的useEffect try塊中嘗試以下操作:
testLogin(value === 'true')(dispatch)
(替換 if/else)
uj5u.com熱心網友回復:
如果我錯了,請糾正我。但是您是否正確定位了 testLogin?
例如,我以前見過這個問題,人們只是忘記正確定位 Action。
例如一個名為 LoginActions 的物件。
const LoginActions = {... testLogin(loginStatus) { ...} }
然后在我要發送的代碼中
import { LoginActions } from "../store/LoginActions" //<-- Import here
useEffect(() => {
async function getStorageValue() {
let value;
try {
value = await AsyncStorage.getItem('isLoggedIn');
if (value === 'true') {
dispatch(LoginActions.testLogin(true)) //<-- Dispatch here.
} else {
dispatch(LoginActions.testLogin(false));
}
} catch (e) {
// handle here
} finally {
}
}
getStorageValue();
}, []);
同樣,我可能誤解了,但我只是想知道是否是這種情況?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344932.html
