如何修复'_react [“ default”]。memo不是函数。 (在React native中出现'_react [“ default”]。memo(connectFunction)'错误?

时间:2019-04-15 14:10:09

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

我正在尝试通过Container将Redux mapStateToProps()和mapActionCreators()连接到登录屏幕,并且正在使用React导航。

构建我的应用程序后,出现以下错误消息:

  

_react [“ default”]。memo不是函数。 (在'_react [“ defaults”]。memo(connectFunction)'中,'_ react [“ defaults”]。memo'未定义。

我搜索了一段时间,但得到的是React.memo()帮助我们控制组件何时重新呈现,但我没有使用任何与React.memo()相关的代码。

登录屏幕:(screens / 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);

顶级导航:(navigations / 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 个答案:

答案 0 :(得分:13)

我解决了它,看来React-Redux包依赖于React 16.8.0并以某种方式使用React.memo(),所以我将React-Redux降级到v6.0.0

答案 1 :(得分:8)

与上述解决方案相同,但有说明。确保清除Expo缓存!

将您的react-redux降级到6.0.1版本

npm install react-redux@6.0.1

清除Expo中的缓存

expo r -c

答案 2 :(得分:1)

将您的react-redux降级到v6.0.0并通过以下方式启动expo项目 expo r -c 重置缓存

答案 3 :(得分:0)

目前无法发表评论,因此将其添加为Ahmed Saeed的回复above的补充。 截至今天(4月17日),世博会尚不支持Hooks,更多信息here。从v.7.0.1版本起

  

connect现在在内部使用React.memo(),它返回一个特殊的   对象而不是功能。

它是rewritten和Hooks。将react-redux降级到v.6.0.0会有帮助。