【问题标题】:error when using connect (function of the react-redux library)使用连接时出错(react-redux 库的功能)
【发布时间】:2019-04-09 19:14:10
【问题描述】:

我有一个组件类,我正在使用 react-redux 连接 redux 存储,但是当我尝试将组件传递给连接函数时出现错误。

_react.default.memo 不是一个函数。 (在 '_react.default.memo(ConnectFunction) 中, '_react.default.memo' 未定义)

wrapWithConnect C:\Users\SESA506797XmobileApp Gatherman\node 模块 react-redux\lib\components connectAdvanced.js: 339:45

I enclose an image of the generated errerur

这是调用 connect 的类的内容

影片细节

import React from 'react'
import { StyleSheet, View, ActivityIndicator, ScrollView, Text, Image } 
from 'react-native'
import { getFilmDetailFromApi, getImageFromApi } from '../API/TMDBApi'
import { connect } from 'react-redux'

class FilmDetail extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      film: undefined,
    }
  }
  componentDidMount() {
    getFilmDetailFromApi(this.props.navigation.state.params.idFilm).then(data => {
      this.setState({
        film:data,
        isLoading: false
      })
    })
  }

  _displayFilm(){
    const film = this.state.film
    if(film != undefined){
      return(
        <ScrollView style={styles.scrollView_container}>
          <Image
            style = {styles.image}
            source = {{uri: getImageFromApi(film.backdrop_path)}}
          />
          <Text style={styles.title_text}>{film.title}</Text>
          <Text style={styles.description_text}>{film.overview}</Text>
          <Text style={styles.default_text}>Note : {film.vote_average} / 10</Text>
        </ScrollView>
      )
    }
  }

  render() {
    return (
      <View style={styles.main_container}>
        {this._displayFilm()}
      </View>
    )
  }
}

const styles = StyleSheet.create({
  main_container: {
    flex: 1
  },
})

const mapStateToProps = (state) => {
  return state
}

export default connect(mapStateToProps)(FilmDetail)

这是我的 package.json

 {
      "main": "node_modules/expo/AppEntry.js",
      "scripts": {
        "start": "expo start",
        "android": "expo start --android",
        "ios": "expo start --ios",
        "eject": "expo eject"
      },
      "dependencies": {
        "expo": "^32.0.0",
        "numeral": "^2.0.6",
        "react": "16.5.0",
        "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
        "react-native-modal": "^9.0.0",
        "react-navigation": "^3.6.1",
        "react-redux": "^7.0.1",
        "redux": "^4.0.1"
      },
      "devDependencies": {
        "babel-preset-expo": "^5.0.0"
      },
      "private": true
    }

【问题讨论】:

  • 你能发布你的 package.json 吗?
  • { "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo start --android", " ios": "expo start --ios", "eject": "expoject" }, "dependencies": { "expo": "^32.0.0", "numeral": "^2.0.6", "react ": "16.5.0", "react-native": "github.com/expo/react-native/archive/sdk-32.0.0.tar.gz", "react-native-modal": "^9.0.0", "react-navigation": "^3.6.1", "react -redux": "^7.0.1", "redux": "^4.0.1" }, "devDependencies": { "babel-preset-expo": "^5.0.0" }, "private": true }
  • 谢谢。我相信下面的答案是正确的。

标签: react-native react-redux


【解决方案1】:

前段时间我认为和你一样的问题。我更新到最新的 React 版本:

npm install react@latest

然后安装 0.4.0 版的 react schedule 包:

npm i schedule@0.4.0 --save-dev

并用

降级了react-redux
npm i react-redux@6.0.1

至少目前我的问题已经解决了,希望它适用于你的问题。

【讨论】:

  • 我有同样的错误Unable to resolve "./utils/batch" from "node_modules\react-redux\lib\index.js"
  • 放下一切,像这样安装。它有效
【解决方案2】:

如果你使用 expo,你必须降级你的 react-redux 并清除 expo 缓存。

npm i react-redux@6.0.1

npm i

expo r -c

【讨论】:

    【解决方案3】:

    只需将您的 React 更新到最新版本。它是向后兼容的,所以不用担心。

    npm install react@latest
    

    React.memo 仅适用于 React 16.6 及更高版本。

    https://reactjs.org/blog/2018/10/23/react-v-16-6.html

    【讨论】:

    • 我按照你的建议去做。现在通过重新启动我的项目,我遇到了另一个错误 Unable to resolve "schedule/tracking" from "node_modules\react-native\Libraries\Renderer\oss\ReactNativeRenderer-dev.js"
    【解决方案4】:

    这是因为您使用了最新版本的 react-redux,它依赖于 Expo SDK 不支持的 react.memo API。要解决这个问题,可以安装老版本的 react-redux,比如 6.0 版本。

    【讨论】:

    • 我回到这个版本,出现另一个错误Unable to resolve "./utils/batch" from "node_modules\react-redux\lib\index.js"
    • 使用确切的版本 6.0.0 而不是 6.0.1。希望它能解决您的问题。
    • 我使用 react-redux 6.0.0 版本
    【解决方案5】:

    当我将 react-redux 降级回 4.4.9 版本时,我遇到了同样的问题并得到了解决

    npm install react-redux@4.4.9 
    

    或者如果你使用纱线

    yarn add react-redux@4.4.9
    

    希望它也对你有用。但首先要确保这次大幅降级不会对您的项目产生负面影响。

    【讨论】:

      【解决方案6】:

      有同样的问题。通过切换到 yarn 并使用以下设置重新安装所有模块来解决此问题:

      {
        "main": "node_modules/expo/AppEntry.js",
        "scripts": {
          "start": "expo start",
          "android": "expo start --android",
          "ios": "expo start --ios",
          "eject": "expo eject"
        },
        "dependencies": {
          "@expo/vector-icons": "^9.0.0",
          "date-fns": "^1.30.1",
          "expo": "^32.0.6",
          "moment": "^2.24.0",
          "native-base": "^2.10.0",
          "react": "16.8.6",
          "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
          "react-native-elements": "^0.19.1",
          "react-navigation": "^3.0.9",
          "react-redux": "^6.0.0",
          "redux": "^4.0.1"
        },
        "devDependencies": {
          "babel-preset-expo": "^5.1.1",
          "schedule": "^0.4.0"
        },
        "private": true
      }
      

      【讨论】:

        猜你喜欢
        • 2018-05-14
        • 1970-01-01
        • 2018-06-27
        • 2018-03-10
        • 1970-01-01
        • 2017-10-14
        • 2018-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多