大家好,我在本机应用程序中使用redux。好吧,我在导航器的InitialState中保存了一个不良信息,所以当我尝试在android模拟器中重新加载应用程序时,我收到此错误
不变的Vilation:没有为关键用户定义路由。必须是以下之一:'主要','欢迎'
错误发生的原因在于此方法
export function loginWithFacebook(facebookAccessToken) {
return (dispatch) => {
return fetch(`${HOST}/api/v1/facebook`, {
method: 'POST',
body: JSON.stringify({
facebook_access_token: facebookAccessToken,
}),
headers: { "content-type": "application/json" },
})
.then(response => response.json())
.then(json => {
console.log(json);
if (json.access_token) {
dispatch(setAccessToken(json.access_token));
dispatch(setProfile(normalizeProfile(json.email, json.fullname, json.image)));
dispatch(resetRoute({ routeName: 'Welcome' }));
} else {
alert(json.error);
}
})
.catch(e => alert(e)); }; }
此行发生错误
dispatch(resetRoute({routeName:' Welcome'}));
并将值Home添加到我的initialState导航而不是欢迎值
export function resetRoute(route) {
return (dispatch, getState) => {
const nav = getState().nav;
dispatch(NavigationActions.reset({
index: 0,
key: null,
actions: [
NavigationActions.navigate(route)
]
})); }; }
export default combineReducers({
nav,
user });
const initialState = AppNavigator.router.getStateForAction(NavigationActions.reset({
index: 0,
actions: [
NavigationActions.navigate({
routeName: 'Main',
}),
], }));
export default function(state = initialState, action) {
//state = undefined;
const nextState = AppNavigator.router.getStateForAction(action, state);
return nextState || state;
};
上面的方法抛出异常,因为它调用AppNavigator.router.getStateForAction(action,state);它得到了#34; Home"相反"欢迎"所以基本上我需要重新启动initialState到开头
如何手动设置所有initialState reducer?记得我在Android模拟器中看不到屏幕所以我无法使用按钮或类似的东西触发操作。
我发现这篇文章:How to reset the state of a Redux store?但在我的情况下,我无法看到触发Logout操作的屏幕。
我认为解决方案是设置null或清空我的reducers的initialState值可以从头开始。但是我怎么能这样做呢?
答案 0 :(得分:0)
所以你的主要问题是你要重置商店的状态,但你甚至无法访问第一个屏幕,所以你不能在屏幕上发送动作来重置它,我是对的吗?
您可以执行的操作以及您链接的其他stackoverflow答案:How to reset the state of a Redux store?,您可以在呈现屏幕之前重置状态。
如果你在那里提到你的减速器,你可以在呈现屏幕之前发送动作。例如,在您的应用程序的索引中。例如,您可能希望在索引文件中执行此操作。
您可以通过不使用react-redux
但使用dispatch方法将操作直接分发到商店来实现此目的。
在您实际呈现任何屏幕之前,索引文件中的store.dispatch(<Reseting action goes here>)
之类的内容。
希望它有所帮助!如果您发现任何问题或者问题不够清楚,请告诉我。干杯!