【发布时间】:2020-09-01 22:44:29
【问题描述】:
我最近开始使用 React Native 进行编程,并且刚刚接触到 Navigations,它们非常酷且功能强大。但是,作为初学者,我遇到了一些问题。我正在使用 Redux 来管理状态,并且我有一个导航堆栈,它应该只在登录状态处于活动状态时呈现。这是代码的一个小sn-p。
const RootStackScreen = () => (
<RootStack.Navigator headerMode="none">
{initialState.loggedIn ? (
<RootStack.Screen name="Application" component={TabScreen} />
) : (
<RootStack.Screen name="Authentication" component={AuthStackScreen} />
)}
</RootStack.Navigator>
);
正如您在此处看到的,我的 RootStack 中有两个屏幕,我的身份验证屏幕,然后是我的主应用屏幕。我只是想说嘿,如果loggedIn 状态为真,则呈现应用程序,否则呈现身份验证屏幕。问题是,当我通过登录页面使用 redux 更改状态时,它会更新但不会更改页面。为方便起见,我还附上了我的 redux initialState 和 reducer
const initialState = {
action: "",
loggedIn: false,
username: null,
isLoading: false,
failedLogin: "",
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case "USER_LOGIN_GOOD":
return { loggedIn: true };
case "USER_LOGIN_FAIL":
return { failedLogin: "Login Failed, Please try again" };
default:
return state;
}
};
我试过说initialState.loggedIn 和loggedIn,但由于某种原因,当它通过另一个页面中的redux 更新时它不会更新值。我已经检查以确保通过简单地打印新值来更新值,所以我知道更新值不是问题,而只是 RootStack 感应到更新。
非常感谢!任何帮助都会很有用,因为我一直为此努力!!!
更新:我正在通过调用 Dispatch 从我的登录页面设置状态
function mapDispatchToProps(dispatch) {
return {
logInSuccess: () =>
dispatch({
type: "USER_LOGIN_GOOD",
}),
logInFailed: () =>
dispatch({
type: "USER_LOGIN_FAIL",
}),
};
}
我也刚刚尝试像这样将 initialState 传递到 RootStack 中
const RootStackScreen = (initialState) => ( CONTENT HERE )
但它仍然不起作用。再次,非常感谢您
【问题讨论】:
-
RootStackScreen应该从 props 获取登录值。您能否发布更多为const RootStackScreen设置initialState的代码? -
帖子已更新!
-
感谢更新,但我真正想要的是状态如何绑定到
RootStackScreen。在 redux 中,您应该将所有值设置到存储中,然后通过将它们连接到存储(通过 hooksor HoC)从组件中访问它们。您是否尝试直接在您的根屏幕中访问initialState?
标签: reactjs react-native redux react-redux navigation