【问题标题】:React: react-navigation / react-navigation-redux-helpers - 'Invariant Violation: Element type is invalid... at ExpoRootComponent'React:react-navigation / react-navigation-redux-helpers - '不变违规:元素类型无效......在ExpoRootComponent'
【发布时间】:2019-06-07 21:06:07
【问题描述】:

我正在尝试在 react 本机应用程序中实现 redux 和导航,因此我正在尝试按照 react-native-redux-helpers (here) 的说明进行操作。

我似乎能够毫无问题地访问 Root 类实例化,但在组件尝试加载时收到错误:

App.js:

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStore, combineReducers, applyMiddleware } from 'redux';
import { Provider, connect } from 'react-redux';
import rootReducer from './src/reducers/index';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import { reduxifyNavigator, createReactNavigationReduxMiddleware, createNavigationReducer } from 'react-navigation-redux-helpers';

import LoginScreen from './src/screens/LoginScreen';
import NotesScreen from './src/screens/NotesScreen';

const AppNavigator = createStackNavigator({
  Login: {
        screen: LoginScreen
  },
  Notes: {
        screen: NotesScreen
  }
})

const navReducer = createNavigationReducer(AppNavigator);

const appReducer = combineReducers({
  rootReducer,
  navReducer
})

const middleware = createReactNavigationReduxMiddleware('root', state => state.nav);

const App = reduxifyNavigator(AppNavigator, 'root');

const mapStateToProps = state => ({
  state: state.nav
})

const AppWithNavigationState = connect(mapStateToProps)(App);

const store = createStore(appReducer, applyMiddleware(middleware));

class Root extends React.Component {
  render() {
        return (
              <Provider store={store}>
                    <AppWithNavigationState />
              </Provider>
        )
  }
}

【问题讨论】:

标签: reactjs react-native redux react-redux react-navigation


【解决方案1】:

你需要像这样导出你的类;

export default class Root extends React.Component {
  render() {
    return (
          <Provider store={store}>
                <AppWithNavigationState />
          </Provider>
    );
  }
} 

编辑:您还需要更改组合减速器;

const appReducer = combineReducers({
  rootReducer,
  nav: navReducer
})

所以在你的 mapStateToProps 中,你可以使用state:state.nav

【讨论】:

  • 从来没有考虑过这个。由于某种原因,react-navigation-redux-helpers 的文档中不存在。虽然我现在收到一个新错误,在 connect() 方法中说“未定义不是对象(评估 state.routes)。
  • 对于您的新问题,我认为您可以使用我的答案的编辑版本来修复。
猜你喜欢
  • 2020-12-11
  • 2018-07-19
  • 2019-05-09
  • 2019-12-28
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多