Javascript .map在对象数组上未定义
我将对象数组作为道具从App.js->searchResult->TrackList.js传递。但当我在对象数组上应用.map函数时,它显示无法读取未定义的属性“map”。我尝试过不同的方法来解决这个问题,但没有一种有效。在控制台中,我得到了道具的值。我的TRackList.js组件在一次运行中渲染了四次。这是密码 App.jsJavascript .map在对象数组上未定义,javascript,reactjs,Javascript,Reactjs,我将对象数组作为道具从App.js->searchResult->TrackList.js传递。但当我在对象数组上应用.map函数时,它显示无法读取未定义的属性“map”。我尝试过不同的方法来解决这个问题,但没有一种有效。在控制台中,我得到了道具的值。我的TRackList.js组件在一次运行中渲染了四次。这是密码 App.js this.state = { searchResults: [ { id: 1, name: &
this.state = {
searchResults: [
{
id: 1,
name: "ritik",
artist: "melilow"
},
{
id: 2,
name: "par",
artist: "ron"
},
{
id: 3,
name: "make",
artist: "zay z"
}
]
return ( <SearchResults searchResults={this.state.searchResults} /> )
此.state={
搜索结果:[
{
id:1,
名称:“ritik”,
艺术家:“草木犀”
},
{
id:2,
名称:“标准杆”,
艺术家:“罗恩”
},
{
id:3,
名称:“制造”,
艺术家:“扎伊z”
}
]
返回()
在Searchresult.js中
在TrackList.js中
import React from "react";
import Track from "./Track";
export default class TrackList extends React.Component {
constructor(props) {
super();
}
render() {
console.log("here", this.props.tracked);
return (
<div>
<div className="TrackList">
{this.props.tracked.map(track => {
return (<Track track={track} key={track.id} />);
})}
</div>
</div>
);
}
}
从“React”导入React;
从“/Track”导入曲目;
导出默认类TrackList扩展React.Component{
建造师(道具){
超级();
}
render(){
log(“这里”,this.props.tracked);
返回(
{this.props.tracked.map(track=>{
返回();
})}
);
}
}
这是完整的代码--在循环之前,您需要检查this.props.tracked.map是否存在 解决方案沙盒链接:
从“React”导入React;
从“/Track”导入曲目;
从“道具类型”导入道具类型;
导出默认类TrackList扩展React.Component{
建造师(道具){
超级();
}
render(){
console.log(“此处”,this.props.tracked的类型);
返回(
{this.props.tracked&&this.props.tracked.map(track=>{
返回;
})}
);
}
}
TrackList.propTypes={
跟踪:PropTypes.arrayOf(PropTypes.shape({
名称:PropTypes.string,
艺术家:PropTypes.string,
}))
};
您加载了组件跟踪列表两次。有一次没有传递属性,这就是为什么它首先在控制台中设置,然后看起来像是未设置的,但这只是第二个日志。我已更新了您的代码。请看这里在实现映射函数之前,您需要检查这个.props.tracked值
您只需使用this.props.tracked&跟随您的代码进行检查。您应该将searchResults={this.state.searchResults}
添加到您的app.js
播放列表中,使用道具将其放入播放列表中,然后从播放列表中将其设置到TrackList中(tracked={props.searchResults}
)
而且,打字脚本帮助我避免犯这样的错误。
另外,将一个键道具添加到您在map
函数中返回的组件中。同样适用于这里,在他的情况下,该值未作为属性传递,因此这将修复错误,但不会修复其未定义的原因:)@Julian Yes,同意。我使用PropTypes检查更新解决方案。问题是您已呈现轨迹列表播放列表中的组件
未通过跟踪的组件
道具。从播放列表
组件中删除跟踪列表
组件,或者将数组作为跟踪的
道具传递给跟踪列表
组件。如果不想通过h在App
组件状态中定义
import React from "react";
import Track from "./Track";
import PropTypes from 'prop-types';
export default class TrackList extends React.Component {
constructor(props) {
super();
}
render() {
console.log("here", typeof this.props.tracked);
return (
<div>
<div className="TrackList">
{this.props.tracked && this.props.tracked.map(track => {
return <Track track={track} key={track.id} />;
})}
</div>
</div>
);
}
}
TrackList.propTypes = {
tracked: PropTypes.arrayOf(PropTypes.shape({
name: PropTypes.string,
artist: PropTypes.string,
}))
};