Javascript TypeError:this.props.messages.map不是函数
我正在使用React Redux,在解析数组时遇到问题 我使用选择器将数据返回到组件,但得到错误Javascript TypeError:this.props.messages.map不是函数,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我正在使用React Redux,在解析数组时遇到问题 我使用选择器将数据返回到组件,但得到错误TypeError:this.props.messages.map不是函数。但如果Iconsole.log值,它将返回正常数组。我做错了什么 组件渲染方法: render() { const {loading, error, messages} = this.props; const mes = JSON.stringify(messages); console.log(m
TypeError:this.props.messages.map不是函数
。但如果Iconsole.log
值,它将返回正常数组。我做错了什么
组件渲染方法:
render() {
const {loading, error, messages} = this.props;
const mes = JSON.stringify(messages);
console.log(mes); //<------------- returns [{"key":"value"}]
return (
<div>
<MessageList
messages={mes}
/>
);
}
render(){
const{loading,error,messages}=this.props;
const mes=JSON.stringify(消息);
控制台日志(mes);//(
你在评论中说:
消息返回以下内容:列表,而不是数组
JavaScript没有列表类型,从JSON.stringify
的结果可以清楚地看出messages
是一个数组,或者至少是JSON.stringify
认为是数组的东西
我想如果你仔细一看,你会发现消息
是一个数组,你可以直接在消息列表中使用它
如果消息
真的、真的没有映射
方法,您可以使用数组将其从任何内容转换为数组。from
:
mes = Array.from(messages);
…或可能(取决于它是什么)排列符号:
mes = [...messages];
您当然不需要JSON.stringify,它会创建一个字符串,您可以做的是
render() {
const {loading, error, messages} = this.props;
return (
<div>
<MessageList
messages={messages}
/>
</div>
);
}
render(){
const{loading,error,messages}=this.props;
返回(
);
}
看起来消息来自redux状态。因此,最初消息道具将未定义。因此,在执行映射之前,请使用下面的条件运算符检查消息是否未定义
{this.props.messages && this.props.messages.map((item, i) => (
<MessageItem
key={i}
message={item.message}
/>
))}
{this.props.messages&&this.props.messages.map((项目,i)=>(
))}
这只是一个打字错误,投票决定按此关闭。PrEto-您将mes
,而不是消息
,传递到您的MessageList
mes
是一个字符串(由JSON.stringify
生成)。我假设mes
是用于调试的,您想将消息
传递给MessageList
消息
是一个数组,带有map
方法;mes
是一个字符串,没有map
。(哎呀,我不能投票以打字错误的形式关闭,我错误地投票以重复的形式关闭,因为我最初误读了这个问题。)此外,您不应该只为组件键使用整数索引。您应该通过添加前缀/后缀使其唯一。类似于key={I+'mi'}
。请参阅.@T.J.Crowder,messages returns List,我想将其转换为JSON的数组's@PrEto,不要使用json.stringify
,正如T.j建议的那样,它会将其转换为字符串,并且无法迭代。您应该传递message={messages}
@PrEto-“我想将其转换为json的数组”JSON是一种用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么您就不是在处理JSON。谢谢您,它完成了任务!有一个问题,我将接受您的回答。我可以在componentDidMount中使用redux状态还是在ComponentWillMount中使用SetState?您通常从映射中的redux状态获取值组件中的stateTrops,然后将MapStateTrops传递给redux connect方法。现在,您可以使用组件中任何位置的例如this.props.messages来访问这些值。@正确地预处理您的问题是组件实际从redux store
接收道具的时刻。您可以查看他的:@再三考虑,再次感谢。最后一个问题是,如果我连接到websockets以每秒获得1k saga请求是否正常?当我使用获取时,它只执行了一次?我同意你的回答!对不起,我不知道web sockets和redux saga。我从未使用过这些库。请不要忘记更新投票还有:)
{this.props.messages && this.props.messages.map((item, i) => (
<MessageItem
key={i}
message={item.message}
/>
))}