ошибка при использовании connect (функция библиотеки react-redux)

#react-native #react-redux

#react-native #react-redux

Вопрос:

У меня есть класс компонента, который я использую react-redux для подключения хранилища redux, но я получаю сообщение об ошибке при попытке передать компонент в функцию connect.

_react.default.memo не является функцией. (В ‘_react.default.memo(ConnectFunction), ‘_react.default.memo’ не определено)

wrapWithConnect C:UsersSESA506797XmobileApp Модуль Gatherman node использует react-reduxlibcomponents connectAdvanced.js : 339:45

Я прилагаю изображение сгенерированной ошибки

Вот содержимое класса, в котором был вызван connect

FilmDetail

 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
    }
  

Комментарии:

1. Можете ли вы опубликовать свой package.json?

2. { «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»: » 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 }

3. Спасибо. Я считаю, что приведенный ниже ответ правильный.

Ответ №1:

Некоторое время назад у меня была, как мне кажется, та же проблема, что и у вас. Я обновился до последней версии React с:

 npm install react@latest
  

Затем установлена версия 0.4.0 пакета расписания react с:

 npm i schedule@0.4.0 --save-dev
  

И пониженный уровень react-redux с

 npm i react-redux@6.0.1
  

по крайней мере, на данный момент моя проблема решена, надеюсь, она сработает с вашей.

Комментарии:

1. У меня такая же ошибка Unable to resolve "./utils/batch" from "node_modulesreact-reduxlibindex.js"

2. Откладываем все и устанавливаем вот так. это работает

Ответ №2:

Если вы используете expo, вам необходимо понизить уровень вашего react-redux и очистить кэш expo.

 npm i react-redux@6.0.1

npm i

expo r -c
  

Ответ №3:

Для ее решения я использую yarn (или npm, если хотите)

 yarn add react-redux
  

Это обновит ваш ‘react-redux’ до последней версии и решит мою проблему. Надеюсь, это полезно.

Ответ №4:

Просто обновите свой React до последней версии. Это обратно совместимо, поэтому не нужно беспокоиться.

 npm install react@latest
  

React.memo доступен только в React версии 16.6 и выше.

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

Комментарии:

1. Я делаю так, как вы предложили. Теперь, перезапуская мой проект, я не могу устранить эту другую ошибку "schedule/tracking" from "node_modulesreact-nativeLibrariesRendererossReactNativeRenderer-dev.js"

Ответ №5:

Это произошло из-за того, что вы использовали самую последнюю версию react-redux, зависящую от react.memo API, которая не поддерживается Expo SDK. Чтобы решить эту проблему, вы можете установить более старую версию react-redux, такую как версия 6.0.

Комментарии:

1. Я вернулся к этой версии, появляется другая ошибка Unable to resolve "./utils/batch" from "node_modulesreact-reduxlibindex.js"

2. Используйте точную версию 6.0.0 вместо 6.0.1. Надеюсь, это решит вашу проблему.

3. Я использую версию 6.0.0 react-redux

Ответ №6:

У меня была такая же проблема, и она была исправлена, когда я понизил свой react-redux до версии 4.4.9

 npm install react-redux@4.4.9 
  

или если вы используете yarn

 yarn add react-redux@4.4.9
  

Надеюсь, у вас это тоже сработает. Но сначала убедитесь, что это резкое понижение версии не повлияет отрицательным образом на ваш проект.

Ответ №7:

Возникла та же проблема. Она была решена путем переключения на 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
}