Javascript 反应重复';s connect()方法引发类型错误
在Dan Abramov关于Redux的优秀教程和第27章“使用connect()生成容器”中,出现了一个奇怪的错误: 首先,我定义这两个函数:Javascript 反应重复';s connect()方法引发类型错误,javascript,reactjs,redux,connect,react-redux,Javascript,Reactjs,Redux,Connect,React Redux,在Dan Abramov关于Redux的优秀教程和第27章“使用connect()生成容器”中,出现了一个奇怪的错误: 首先,我定义这两个函数: const mapStateToProps = (state) => { return { todos: getVisibleTodos(state.todos, state.visibilityFilter) }; } const mapDispatchToProps = (dispatch) => { re
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);
执行此操作时,会导致浏览器无法渲染,控制台返回:
TypeError:无法读取未定义的属性“displayName”
我以前从未遇到过这个错误,它似乎是特定于react redux
的connect()
方法的
以前有没有人遇到过这种情况,和/或知道是什么原因造成的
更新:
getVisibleTodos
是上面定义的。如果您想查看它的TodoList
const TodoList = ( {todos, onTodoClick} ) => (
<ul>
{todos.map(todo =>
<Todo key={todo.id}
{...todo}
onClick={() => onTodoClick(todo.id)}
/>
)}
</ul>
)
consttodolist=({todos,onTodoClick})=>(
{todo.map(todo=>
onTodoClick(todo.id)}
/>
)}
)
在调用connect
之后,您可能正在定义TodoList
组件。与var
关键字不同,像let
、const
和class
这样的ES6关键字不会被提升到作用域的顶部,而只从它们声明的行开始存在。因此,如果在定义TodoList
之前调用connect()
,则实际上是在运行connect()(未定义)
。也可能是您的import语句不正确,这也可能导致TodoList
未定义
有关进一步的讨论,请参阅。在调用
connect
之后,您可能正在定义TodoList
组件。与var
关键字不同,像let
、const
和class
这样的ES6关键字不会被提升到作用域的顶部,而只从它们声明的行开始存在。因此,如果在定义TodoList
之前调用connect()
,则实际上是在运行connect()(未定义)
。也可能是您的import语句不正确,这也可能导致TodoList
未定义
有关进一步的讨论,请参阅。请向我们展示
getVisibleTodos
正在做什么。请参阅更新您的TodoList
react类是什么?它是否正确导入或定义?正如@Zack Tanner所说,请向我们展示getVisibleTodos
@Zack Tanner和@Pineda,getVisibleTodos
被定义为connect()
方法,该方法传递MapStateTops和mapDispatchToProps,然后连接到另一个组件,在本例中为TodoList
。因此,我已经向您展示了getVisibleTodos
。请向我们展示getVisibleTodos
正在做什么。请查看更新您的TodoList
react类是什么?它是否正确导入或定义?正如@Zack Tanner所说,请向我们展示getVisibleTodos
@Zack Tanner和@Pineda,getVisibleTodos
被定义为connect()
方法,该方法传递MapStateTops和mapDispatchToProps,然后连接到另一个组件,在本例中为TodoList
。所以我已经向你展示了getVisibleTodos
。你是一个传奇人物。就这样!另外,知道ES6变量关键字不提升非常有用,但我不知道这一点。谢谢!:)当然是的,块作用域实际上是let
和const
存在的主要原因,但这可能会让人们感到有点惊讶。仅供参考,我有一个关于的文章列表,作为我文章的一部分,你可能会觉得很有帮助。你是一个传奇人物。就这样!另外,知道ES6变量关键字不提升非常有用,但我不知道这一点。谢谢!:)当然是的,块作用域实际上是let
和const
存在的主要原因,但这可能会让人们感到有点惊讶。仅供参考,我有一个关于的文章列表,作为我文章的一部分,您可能会发现它很有用。