我有应用程序“音乐应用程序”供两个用户输入“访客,用户注册”
我有一个底部导航器,当访客打开我的应用程序时,我只想呈现 4 个底部选项卡“主页、浏览、搜索、广播”。
但是当用户登录/注册时,我想呈现 5 个以前的标签以及“库”标签。
所以
我在用户register\login时分派动作,并将 isLogin 状态从false更改为true并执行一些操作,例如将一些其他数据添加到我的抽屉中,它看起来不错,
我想访问react-navigation 文件“ Tabs.js ”中的redux 存储,
我想访问状态,mapStateToProps
但无法this.props.isLogin
从非类组件访问!
所以我不知道如果我不使用 Class 组件我该怎么做!
那么有没有办法在 Tabs.js 文件中使用“connect HOC”访问 redux 存储?
代码
Tabs.js 文件
import {connect} from 'react-redux';
import {store} from '../redux/store/store';
const LoginTabs = createBottomTabNavigator({....}); // For user '5 tabs'
const notLoginTabs = createBottomTabNavigator({....}); // For Guest '4 tabs'
const App = this.props.isLogin ? LoginTabs : notLoginTabs; // Not work i know :P
export default (createAppContainer(App));
编辑 Drew Reese 的答案
当我尝试以这种方式执行此操作时,我收到了错误消息
const mapStateToProps = state => {
console.log('state', state);
return {
isLogin: state.user.isLogin,
};
};
const App = ({isLogin, ...props}) =>
isLogin ? <LoginTabs {...props} /> : <NotLoginTabs {...props} />;
const Root = createAppContainer(App);
export default connect(mapStateToProps)(Root);
错误信息
这个导航器同时拥有导航和容器props,所以不清楚它是否应该拥有自己的状态。移除 props: "isLogin, dispatch" 如果导航器应该从导航 props 获取它的状态。如果导航器应该保持自己的状态,请不要传递导航props。
我试过的
我把所有的堆栈
“抽屉、堆栈、底部标签”
在一个文件“类组件”中,它可以工作,但正如@Drew 所说,这样做不是一个好主意:)
如果你想看,这里有一个要点文件