React native 更新Redux状态时响应导航StackNavigator重置
这里需要一些帮助,我在使用react导航的redux时遇到一些问题 每当我在redux中更新状态时,react导航将在我的抽屉导航器中重置为initialRouteName,即主页 在this.props.dispatch更新Redux状态后,我如何保持在该屏幕上 在将redux与react导航集成时,我应该执行哪些步骤 非常感谢你的帮助。感激 App.jsReact native 更新Redux状态时响应导航StackNavigator重置,react-native,react-redux,react-navigation,React Native,React Redux,React Navigation,这里需要一些帮助,我在使用react导航的redux时遇到一些问题 每当我在redux中更新状态时,react导航将在我的抽屉导航器中重置为initialRouteName,即主页 在this.props.dispatch更新Redux状态后,我如何保持在该屏幕上 在将redux与react导航集成时,我应该执行哪些步骤 非常感谢你的帮助。感激 App.js const defaultState = { users: [], defaultUserIndex: 0 }; con
const defaultState = {
users: [],
defaultUserIndex: 0
};
const defaultUserState = {
phoneNumber: undefined,
email: undefined,
name: undefined,
userId: undefined,
token: undefined,
avatar: undefined
};
module.exports = (state = defaultState, action) => {
console.log("reducer state: ", state);
switch (action.type) {
case "AUTH_USER":
case "UNAUTH_USER":
case "UPDATE_AVATAR":
case "UPDATE_PHONENUMBER":
case "UPDATE_PERSONALDETAILS":
return { ...state, users: user(state.defaultUserIndex, state.users, action) };
case "CLEAR_STATE":
return defaultState;
default:
return state;
}
};
function user(defaultUserIndex, state = [], action) {
const newState = [...state];
switch (action.type) {
case "AUTH_USER":
return [
...state,
{
phoneNumber: action.phoneNumber,
name: action.name,
email: action.email,
userId: action.userId,
token: action.token,
avatar: action.avatar,
}
];
case "UNAUTH_USER":
return state.filter(item => item.token !== action.token);
case "UPDATE_AVATAR":
newState[defaultUserIndex].avatar = action.avatar;
return newState;
case "UPDATE_PERSONALDETAILS":
newState[defaultUserIndex].name = action.name;
newState[defaultUserIndex].email = action.email;
return newState;
default:
return state;
}
}
这是我声明我的StackNavigator、抽屉导航器的位置
嵌套在堆栈导航器中
在本例中:在每个渲染调用上创建新的
AppNavigator
。每个实例都有新的导航状态
您可以通过将初始化移动到构造函数来修复它,这样每次渲染它都将使用相同的对象
constructor(props) {
super(props);
this.state = {
isReady: false
};
const token = //sometihng
this.navigator = AppNavigator(token)
}
另外:探索官方文档中redux集成的示例
const defaultState = {
users: [],
defaultUserIndex: 0
};
const defaultUserState = {
phoneNumber: undefined,
email: undefined,
name: undefined,
userId: undefined,
token: undefined,
avatar: undefined
};
module.exports = (state = defaultState, action) => {
console.log("reducer state: ", state);
switch (action.type) {
case "AUTH_USER":
case "UNAUTH_USER":
case "UPDATE_AVATAR":
case "UPDATE_PHONENUMBER":
case "UPDATE_PERSONALDETAILS":
return { ...state, users: user(state.defaultUserIndex, state.users, action) };
case "CLEAR_STATE":
return defaultState;
default:
return state;
}
};
function user(defaultUserIndex, state = [], action) {
const newState = [...state];
switch (action.type) {
case "AUTH_USER":
return [
...state,
{
phoneNumber: action.phoneNumber,
name: action.name,
email: action.email,
userId: action.userId,
token: action.token,
avatar: action.avatar,
}
];
case "UNAUTH_USER":
return state.filter(item => item.token !== action.token);
case "UPDATE_AVATAR":
newState[defaultUserIndex].avatar = action.avatar;
return newState;
case "UPDATE_PERSONALDETAILS":
newState[defaultUserIndex].name = action.name;
newState[defaultUserIndex].email = action.email;
return newState;
default:
return state;
}
}
constructor(props) {
super(props);
this.state = {
isReady: false
};
const token = //sometihng
this.navigator = AppNavigator(token)
}