您必须将一个组件传递给 connect 返回的函数。而是收到未定义

IT技术 javascript reactjs redux react-redux
2021-04-28 08:43:29

下面的代码给出

未捕获的错误:您必须将一个组件传递给 connect 返回的函数。而是收到未定义

列表.js

import React from 'react';
import { connect, bindActionCreators } from 'react-redux';
import PostList from '../components/PostList'; // Component I wish to wrap with actions and state
import postList from '../Actions/PostList' //Action Creator defined by me

const mapStateToProps = (state, ownProps) => {
    return state.postsList
}

const mapDispatchToProps = (dispatch) => {
    return bindActionCreators({"postsList":postList},dispatch)
}

export default connect(mapStateToProps, mapDispatchToProps)(PostList);

PostList.js

import React from 'react'

export const PostList = (props) => {
    return <div>List</div>
}

请帮我解决一下?

4个回答

您正在这样做import PostList from '../components/PostList';,您需要export default在 PostList.js 文件中使用。

否则你需要做import { PostList } from '../components/PostList';

对于感兴趣的人,这里有一篇关于 es6 导入/导出语法的好文章:http ://www.2ality.com/2014/09/es6-modules-final.html

与提问者无关,但如果您遇到此错误,则值得检查您的 connect() 语法是否正确:

const PreloadConnect = connect(mapStateToProps, {})(Preload);

export default PreloadConnect;

请注意,Preload是作为 IIFE 参数传递的。

可以在此处找到更多详细信息

可能有以下三个原因,总结如下:

  • 组件之间的循环依赖
  • 用法错误export,并export default再导入错误的方式
  • 错误地使用了connect函数,传递了错误的参数

在我的情况下是循环依赖,循环依赖插件帮助我修复了它。

在我的情况下,Expo 服务器有时无法捕获 Windows 上的文件保存(可能),并且它看到了我尝试连接的组件的旧版本(我可能还没有导出)。在没有真正触及任何东西的情况下重新保存我的组件解决了这个问题。

使用清理过的缓存重新启动 Expo 服务器可能也会有所帮助。