我的 redux dispatch 语句有什么问题?
What is wrong with my redux dispatch statement?
我正在从本地存储中获取数据,并想分派一个 redux 函数。
但是我认为这个动作不是在函数中调用try block
。
在redux中
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
操作函数的参数状态。
这是我在主页中所做的 screen.When 用户打开应用程序。我需要通过检查 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
。调度功能有什么问题吗?
看起来testLogin
是一个高阶函数。即它 returns 一个接受 dispatch 作为参数的函数。
在您的 useEffect
try
块中尝试以下操作:
testLogin(value === 'true')(dispatch)
(替换 if/else)
如果我错了请纠正我。但是您是否正确定位了 testLogin?
例如,我以前见过这个问题,人们只是忘记了正确定位操作。
例如一个名为 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();
}, []);
再说一次,我可能误会了,但我只是想知道是不是这样?
我正在从本地存储中获取数据,并想分派一个 redux 函数。
但是我认为这个动作不是在函数中调用try block
。
在redux中
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
操作函数的参数状态。
这是我在主页中所做的 screen.When 用户打开应用程序。我需要通过检查 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
。调度功能有什么问题吗?
看起来testLogin
是一个高阶函数。即它 returns 一个接受 dispatch 作为参数的函数。
在您的 useEffect
try
块中尝试以下操作:
testLogin(value === 'true')(dispatch)
(替换 if/else)
如果我错了请纠正我。但是您是否正确定位了 testLogin?
例如,我以前见过这个问题,人们只是忘记了正确定位操作。
例如一个名为 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();
}, []);
再说一次,我可能误会了,但我只是想知道是不是这样?