RN项目中react-navigation与react-redux集成使用指南

RN项目中react-navigation与react-redux集成使用指南

安装依赖包

1.yarn add react-navigation
2.yarn add react-navigation-redux-helpers

创建自己的导航器

1.navigator.js

//导入自己的页面
import Login from '../views/Login/Login';
import ForgetPass from '../views/Login/ForgetPass'
//导入创建函数
import {createStackNavigator,createAppContainer, createSwitchNavigator} from 'react-navigation';
//react-navigation-redux-helpers为集成时必须使用的插件,目的是将navigator映射至redux中
import {createReactNavigationReduxMiddleware, createReduxContainer} from 'react-navigation-redux-helpers';
// connect作用是将props或dispatch映射至组件中
import {connect} from 'react-redux';

//创建导航器
const loginNav = createStackNavigator({
  Login: {
    screen: Login,
    navigationOptions: {
      header: null
    }
  },
  ForgetPass: {
    screen: ForgetPass,
    navigationOptions: {
      header: null
    }
  },
})
// 所有创建导航器都需使用createAppContainer包裹
export const RootNavigator = createAppContainer(loginNav);
// 创建react-navigation到redux的中间件(必需步骤)
	//其中nav是reducers中的state名称
	//root是自定义名称
export const middleware = createReactNavigationReduxMiddleware(
  state => state.nav,
  'root',
);
/*
 * 2.将根导航器组件传递给 reduxifyNavigator 函数,
 * 并返回一个将navigation state 和 dispatch 函数作为 props的新组件;
 * 注意:要在createReactNavigationReduxMiddleware之后执行
 */
const AppWithNavigationState = createReduxContainer(RootNavigator, 'root');
/**
 * State到Props的映射关系
 * @param state
 */
const mapStateToProps = state => ({
  state: state.nav,
});
//rootCom 在reducer.js中通过函数查找到该导航器初始state
export const rootCom = 'init'
/**
 * 3.连接 React 组件与 Redux store
 */
const AppNavigator = connect(mapStateToProps)(AppWithNavigationState);

export default () => (<AppNavigator />)

2.reducer.js

import {combineReducers} from 'redux'
import {rootCom, RootNavigator} from 'navigator.js';
//1.指定默认state
const navState = RootNavigator.router.getStateForAction(RootNavigator.router.getActionForPathAndParams(rootCom));
const navReducer = (state = navState, action) => {
      const nextState = RootNavigator.router.getStateForAction(action, state);
      return nextState || state;
 }
 /**
 * 3.合并reducer
 * @type {Reducer<any> | Reducer<any, AnyAction>}
 */
const index = combineReducers({
    nav: navReducer,
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值