3

我正在尝试使用 redux 实现 react-navigation 的 TabNavigator,但我一直遇到错误。我现在收到以下错误:undefined is not an object (evalating 'navigation.state.routes')

我的 index.android.js 和 index.ios.js 都指向了我的 app.js。

我创建了以下类:

导航配置

import {
  TabNavigator
} from 'react-navigation';

// Default colors class
import colors from '../config/colors';

// Tab-Navigators
import MapScreen from '../screens/MapScreen';
import ScanScreen from '../screens/ScanScreen';
import HomeScreen from '../screens/HomeScreen';
import HistoryScreen from '../screens/HistoryScreen';
import LanguageSelectScreen from '../screens/LanguageSelectScreen';

const routeConfiguration = {
  Home:           { screen: HomeScreen },
  LanguageSelect: { screen: LanguageSelectScreen },
  History:        { screen: HistoryScreen },
  Map:            { screen: MapScreen },
  Scan:           { screen: ScanScreen },
}

const tabBarConfiguration = {
  swipeEnabled: false,
  animationEnabled: true,
  tabBarOptions: {
    showLabel: false,
    showIcon: true,
    inactiveTintColor: colors.grey2,
    activeTintColor: colors.selectedTabColor,
  }
}

export const TabBar = TabNavigator(routeConfiguration,tabBarConfiguration)

export const tabBarReducer = (state,action) => {
  if (action.type === 'JUMP_TO_TAB') {
    return { ...state, index:0 }
  } else {
    return TabBar.router.getStateForAction(action,state)
  }
}

选项卡栏组件

// React
import React, { Component } from 'react';

// Navigation
import { addNavigationHelpers } from 'react-navigation'
import { TabBar } from '../navigation/NavigationConfiguration'

//Redux
import { connect } from 'react-redux'

const mapStateToProps = (state) => {
 return {
   navigationState: state.Home,
  }
}

class TabBarComponent extends Component {
  render() {
    return (
      <TabBar
        navigation={
        addNavigationHelpers({
          dispatch: this.props.dispatch,
          state: this.props.navigationState,
        })
      }
      />
    )
  }
}

export default connect(mapStateToProps)(TabBarComponent)

店铺

// Redux
import { applyMiddleware, combineReducers, createStore } from 'redux'
import logger from 'redux-logger'

// Navigation
import { TabBar, tabBarReducer } from '../navigation/NavigationConfiguration';

const middleWare = () => {
  return applyMiddleware(logger);
}

export default createStore(
  combineReducers({
    tabBar: tabBarReducer,
  }),
  middleWare(),
)

主屏幕

// React
import React, { Component } from 'react';
import {
    StyleSheet,
    Text,
    Image,
    View
} from 'react-native';

class HomeScreen extends Component {
  static navigationOptions = {
    tabBar: {
      label: 'Home',
      icon: ({ tintColor }) => (
        <MaterialIcons color={tintColor} name='home' size={26} />
      ),
    },
  }

  constructor(props) {
    super(props);
  }

  render(){
    return (
      <View>
      </View>
    )
  }
}

export default HomeScreen;

应用程序.js

// React
import React, { Component } from 'react';
import {
  AppRegistry,
  View
} from 'react-native';

// Redux
import { Provider } from 'react-redux';
import store from './config/store';

// Navigation
import TabBarComponent from './components/TabBarComponent';

class GeoFort extends Component {
  render() {
    return (
      <Provider store={store}>
        <TabBarComponent />
      </Provider>
    )
  }
}

AppRegistry.registerComponent('GeoFort', () => GeoFort);
4

1 回答 1

0

我终于想通了!在 TabBarComponent 中,我将 mapStateToProps 更改为:

const mapStateToProps = (state) => {
 return {
   navigationState: state.tabBar,
  }
}
于 2017-04-04T07:21:51.867 回答