React-Redux 的 connect() 方法抛出 TypeError

React-Redux's connect() method throwing TypeError

正在研究 Dan Abramov 的 Redux 优秀教程,以及第 27 章 - 使用 connect() 生成容器 - 出现了一个奇怪的错误:

首先我定义了这两个函数:

const mapStateToProps = (state) => {
   return {
      todos: getVisibleTodos(state.todos, state.visibilityFilter)
   };
}
const mapDispatchToProps = (dispatch) => {
   return {
      onTodoClick: (id) => {
         dispatch({
            type: 'TOGGLE_TODO',
            id
         })
      }
   }
}

然后我导入必要的依赖:

import { connect } from 'react-redux'

然后我使用从 react-redux 公开的方法创建我的组件,并传入两个函数,最后连接到我的另一个组件,TodoList

const VisibleTodoList = connect(mapStateToProps, mapDispatchToProps)(TodoList);

当我这样做时,它会导致浏览器无法呈现和控制台 returns:

TypeError: Cannot read property 'displayName' of undefined

我以前从未遇到过这个错误,它似乎是 react-reduxconnect() 方法所特有的。

有没有人以前遇到过这种情况,and/or知道是什么原因造成的吗?


更新:

getVisibleTodos 定义如上。如果它 TodoList 你想看...

const TodoList = ( {todos, onTodoClick} ) => (
   <ul>
      {todos.map(todo =>
         <Todo key={todo.id}
            {...todo}
            onClick={() => onTodoClick(todo.id)}
         />
      )}
   </ul>
)

您可能在 调用 connect 之后定义 TodoList 组件 。与 var 关键字不同,ES6 关键字如 letconstclass not 会被提升到顶部范围,并且只存在于它们被声明的那一行。因此,如果您在定义 TodoList 之前调用 connect(),您实际上是 运行 connect()(undefined)。也有可能您的导入语句不正确,这也可能导致 TodoList 未定义。

有关进一步的讨论,请参阅 https://github.com/reactjs/react-redux/issues/253