Javascript React-Redux:无法读取属性';地图';未定义的 目标
我有一个功能组件,它只显示Redux状态下存储的数组中的姓名(玩家)列表。它开始时是空的,但当用户按下另一个组件的按钮时,该数组将获得推入其中的值 按钮存储在单独组件中的原因是,在MVP之后,该按钮将被移动到不同的父组件中 列出播放器的组件位于名为PlayersCardT1的文件夹和文件中,并导出名为players的函数Javascript React-Redux:无法读取属性';地图';未定义的 目标,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个功能组件,它只显示Redux状态下存储的数组中的姓名(玩家)列表。它开始时是空的,但当用户按下另一个组件的按钮时,该数组将获得推入其中的值 按钮存储在单独组件中的原因是,在MVP之后,该按钮将被移动到不同的父组件中 列出播放器的组件位于名为PlayersCardT1的文件夹和文件中,并导出名为players的函数 从“../RowPlayer”导入RowPlayer; 康斯特玩家=(道具)=>{ 返回( { 道具.玩家.地图(玩家=>( )) } ) } 输出默认玩家; RowP
从“../RowPlayer”导入RowPlayer;
康斯特玩家=(道具)=>{
返回(
{
道具.玩家.地图(玩家=>(
))
}
)
}
输出默认玩家;
RowPlayer
是一个简单的组件,它只输出一个{name}
index.js包含:
从'react redux'导入{connect};
从“/PlayersCardT1”导入玩家;
常量mapStateToProps=状态=>{
返回{
球员:国家队
};
};
导出默认连接(MapStateTops)(播放器);
错误
我得到以下错误:
TypeError:无法读取未定义的属性“map”
尝试解决方案
我尝试将映射放入条件中,但React抱怨组件没有返回任何内容,并添加了return null,因此我这样做了:
if(props.players){//编辑以从演示的解决方案尝试中删除打字错误
返回(
{
道具.玩家.地图(玩家=>(
))
}
)
}
返回null;
这将阻止错误的发生,但列表永远不会填充,即使我按下按钮将名称添加到数组中。我可以在我的Redux开发工具中看到state-players数组中有名字,但没有变化
不确定此时该怎么办。问题在于:
if (props.player) {
这里您正在检查player
,而不是player
。因此,将其更改为:
if (props.players) {
然后重试。结果表明操作正确,但文件被错误地导入其父组件,因为我的自动导入无法跟上我移动文件的速度。有更好的方法,您可以使用新的ES6功能检查情况
返回(
{
道具?玩家?地图(玩家=>(
))
}
)
我不知道redux,但在react的情况下,如果像这样初始化数组,它会给出一个未定义的错误
不正确
thi.state={
玩家:“,
}
您应该检查redux devtools并查看状态。players
何时设置为未定义,或者可能将初始值设置为空数组。也可能是播放器未设置为状态。players
但您必须检查redux devtools以了解这一点。由于未找到您引用的.map
属性,这可能意味着状态.players
最初不是数组,即使是空数组也会调度map属性。如果您可以在使用map
时检查状态.players
值,这样您就可以在props.players.map
被调度之前添加一个控制台.log
,并检查它是否是一个数组。看起来在“if(props.player)”中应该是多个玩家,我的redux devtools将玩家显示为一个空数组,但是,当我按照@KacperBiedka的建议使用console.log(props.players)时,我确实在控制台中得到了“undefined”。为什么会这样?很抱歉,当我重新编写条件来说明我所做的事情时,props.player而不是props.players是一个拼写错误。当我实际尝试将其作为解决方案时,它不在那里。似乎您的组件没有正确接收redux状态,我将搜索react组件和redux状态连接的问题;)