Как исправить '_react ["default"]. Memo не является функцией. (В '_react ["default"]. Memo (connectFunction)' ошибка в React native? - PullRequest
11 голосов
/ 15 апреля 2019

Я пытаюсь подключить Redux mapStateToProps () и mapActionCreators () к экрану входа в систему через контейнер, и я использую навигацию React.

После сборки моего приложения появляется следующее сообщение об ошибке:

_react ["default"]. Memo не является функцией.(В '_react ["defaults"]. Memo (connectFunction)', '_react ["defaults"]. Memo' не определено.

Я искал некоторое время, но я получил следующее:React.memo () помогает нам контролировать повторное рендеринг наших компонентов, но я не использую код, связанный с React.memo ().

Экран входа в систему: (screen / LoginScreen / index.js)

import React from 'react';
import {Dimensions, View} from 'react-native';

//Get width of mobile screen
var width = Dimensions.get("window").width;
var height = Dimensions.get("window").height;

export default class LoginScreen extends React.Component {
    constructor(props){
        super(props);
        this.state = {

        }
    }

    render() {
        return (
            <View style={styles.container}>
                <Text>Log In page</Text>
            </View>
        );
    }
}

LoginScreen.defaultProps = {
}

const styles = {
    container: {
        flex: 1
    }
}

Контейнер экрана входа в систему: (Containers / LoginContainer / index.js)

import {connect} from "react-redux";
import LoginScreen from "../../screens/LoginScreen";

const mapStateToProps = (state) =>({

});


const mapActionCreators = {

};
export default connect(mapStateToProps, mapActionCreators)(LoginScreen);

Навигация верхнего уровня: (navigation / TopLevelSwitchNav.js)

import {createSwitchNavigation, createAppContainer} from 'react-navigation';
import LoginScreen from '../containers/LoginContainer';
import MainTabNav from './MainTabNav';


const TopLevelSwitchNav = createSwitchNavigation({
    Login:  {
        screen: LoginScreen,
        navigationOptions: {
            header: null
        }
    },
    MainTab: {
        screen: MainTabNav,
        navigationOptions: {
            header: null
        }
    }
},
{
    initialRouteName: Login,
    navigationOptions: { header: null }
});

export default createAppContainer(TopLevelSwitchNav);

Зависимости:

"dependencies": {
    "expo": "^32.0.0",
    "react": "16.5.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
    "react-navigation": "^3.8.1",
    "react-redux": "^7.0.2",
    "redux": "^4.0.1",
    "redux-logger": "^3.0.6",
    "redux-persist": "^5.10.0",
    "redux-persist-transform-filter": "^0.0.18",
    "redux-thunk": "^2.3.0"
},

Ответы [ 4 ]

14 голосов
/ 15 апреля 2019

Я решил, похоже, что пакет React-Redux зависит от React 16.8.0 и каким-то образом использует React.memo (), поэтому я понизил React-Redux до v6.0.0

12 голосов
/ 02 мая 2019

То же, что и решения выше, но с инструкциями. Обязательно очистите кэш Expo!

Понизьте ваш response-redux до версии 6.0.1

npm install react-redux@6.0.1

Очистить кеш в Экспо

expo r -c
1 голос
/ 20 апреля 2019

Понизьте ваш response-redux до v6.0.0 и начните свой выставочный проект с expo r -c , которая сбрасывает кэш

1 голос
/ 18 апреля 2019

Пока не можете комментировать, поэтому добавьте это как дополнение к ответу Ахмеда Саида выше . На сегодня, 17 апреля, крючки на Expo еще не поддерживаются, подробнее здесь . Начиная с v.7.0.1 реаги-редукс

connect теперь внутренне использует React.memo (), который возвращает специальный объект, а не функция.

И это переписано с помощью крючков. Понижение версии response-redux до v.6.0.0 помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...