React Native 错误,undefined 不是评估 'Addlistener' 的函数

React Native error, undefined is not a function evaluating 'Addlistener'

有什么办法可以解决这个错误吗?我发现 react-navigation 文档很难理解。

我收到这个错误:

这是我的商店:

import { createStore, applyMiddleware } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";

import rootReducer from "../reducers";

const initialState = {
    hasErrored: false,
    isLoading: true,
    fetchEvents: {},
    fetchCategories: [],
    setCredentials: {
        setYear: 0,
        setGroup: 0,
        setStudent: 0,
        showStudent: false
    }
};

const reduxLogger = createLogger();

const store = createStore(
    rootReducer,
    initialState,
    applyMiddleware(thunk, reduxLogger)
);

export default store;

AppNavigation

import React, { Component } from "react";
import { connect } from "react-redux";
import { BackHandler, Platform } from "react-native";

import { addNavigationHelpers } from "react-navigation";
import NavigationStack from "./navigationStack";


class AppNavigation extends Component {
  componentWillMount() {
    if (Platform.OS !== "android") return;
    BackHandler.addEventListener("hardwareBackPress", () => {
      const { navigationState, dispatch } = this.props;
      const { index } = navigationState;
      if (
        navigationState.routes[index].routeName === "Month" ||
        navigationState.routes[index].routeName === "Day"
      ) {
        dispatch({ type: "Navigation/BACK" });
        return true;
      }
      BackHandler.exitApp();
      return false;
    });
  }

  componentWillUnmount() {
    if (Platform.OS === "android")
      BackHandler.removeEventListener("hardwareBackPress");
  }

  render() {
    const { navigationState, dispatch } = this.props;
    return (
      <NavigationStack
        navigation={addNavigationHelpers({ dispatch, state: navigationState })}
      />
    );
  }
}

const mapStateToProps = state => {
  return {
    navigationState: state.navigationReducer
  };
};

export default connect(mapStateToProps)(AppNavigation);

因为 v1.0.0-beta.28 上的中断更改更改了 Redux 的集成方法。

按照这个document,你需要安装react-navigation-redux-helpers

并在下面添加代码 AppNavigation

import {
  createReduxBoundAddListener,
  createReactNavigationReduxMiddleware,
} from 'react-navigation-redux-helpers';

const middleware = createReactNavigationReduxMiddleware(
  "root",
  state => state.nav,
);
const addListener = createReduxBoundAddListener("root");

并将 addListener 添加到 addNavigationHelpers

  render() {
    const { navigationState, dispatch } = this.props;
    return (
      <NavigationStack
        navigation={addNavigationHelpers({ dispatch, state: navigationState, addListener })}
      />
    );
  }

我正在与 "react-navigation": "^1.0.0-beta.11" 合作 我这样修复

1、使用

在商店中创建中间件

import { createReactNavigationReduxMiddleware } from 'react-navigation-redux-helpers';

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

const store = createStore(
  rootReducer,
  initialState,
  compose(
    applyMiddleware(..., middleware),
  ),
);

  1. 将 addListener 添加到 addNavigationHelpers

import { createReduxBoundAddListener } from 'react-navigation-redux-helpers';

const addListener = createReduxBoundAddListener('root');

render() {
  return (
    <View>
      <MainNavigator
        ref={(nav) => { this.navigator = nav; }}
        navigation={
          addNavigationHelpers({
            dispatch: this.props.dispatch,
            state: this.props.navState,
            addListener,
          })
        }
        screenProps={{
          ...this.props,
        }}
      />
    </View>
  );
}