为什么传递给组件的数据会导致 TypeError:未定义错误?显示在 React 开发工具中
2017-10-16
250
我通过 mapStateToProps 将状态数据传递给 props,但组件无法识别。
// user_show_container
// propper import statements....
const mapStateToProps = state => ({
ids: state.entities.users.usersById.leagueIds;
});
const mapDispatchToProps = dispatch => ({
requestTargetUserData: id => dispatch(requestTargetUserData(id)),
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(UserShow);
操作在 'componentWillMount()' 中调用,props 应该可用
class UserShow extends React.Component {
constructor(props) {
super(props);
}
componentWillMount() {
this.props.requestTargetUserData(this.props.match.params.userId)
}
render() {
const { ids } = this.props; // [1, 2, 3]
return (
<div className="">
<ul>
{ids.map(id => <li>id</li>)} // causes error
</ul>
</div>
)
}
}
export default UserShow;
当我删除 map 函数并且不使用 props 中的数据进行渲染时,Redux 开发工具显示 'id' 数组可供组件使用。
通过 props 传递的所有内容都不会发生这种情况。例如,将其交换出去即可。用户名已呈现到页面。
...
return (
<div className="">
<h1>{targetUser.username}</h1>
</div>
)
}
}
export default UserShow;
我真的很困惑,所以任何指导都将不胜感激。感觉我错过了一些基本的东西,但我找不到任何答案。
感谢您的时间。
2个回答
问题在于初始化:
您应该使用
[]
初始化:
state.entities.users.usersById.leagueIds
,
首次使用时以及值不可用时也应如此。
在这种情况下,
state.entities.users.usersById.leagueIds
将未定义,这是您收到错误的唯一原因
Cannot read property of 'map' of undefined
如果您不想初始化,也可以这样做:
const ids = this.props.ids ? this.props.ids : [];
或者按照@MayankShukla 在评论中建议的更短形式:
const ids = this.props.ids || [];
Vivek Doshi
2017-10-16
这个
state.entities.users.usersById.leagueIds
返回的是一个数组吗?因为如果它返回了未定义,那也可能是错误的原因。
const mappStateToProps = state => ({
ids: ["1", "2", "3"]
});
尝试设置上述内容,看看是否仍然看到错误。如果错误消失,那么是否意味着您的
ids
信息是在组件呈现后填充的?
Nandu Kalidindi
2017-10-16