我能够使用fetch在本地导入api JSON,如果要查看它,可以在此 url中使用该api 。
问题如下,通过状态searchString时,出现以下错误:
“ TypeError:无法读取属性”映射“未定义”
我相信这是因为我正在导入完整的json对象,而我只需要访问关键结果。
File App.js class App extends Component { constructor(props) { super(props); this.state = { searchString: [] }; } componentDidMount() { fetch('./recipes.json') .then(response => response.json()) .then(json => console.log(json )) .then(json => this.setState({ searchString: json })); } render() { return ( <div className="App"> <Navbar /> <div className="container mt-10"> <div className="row"> <RecipeItem list={this.state.searchString}/> </div> </div> </div> ); } } File RecipeItem.js const RecipeList = ({ searchString }) => { <div> <img className="card-img-top img-fluid" src={searchString.href} alt={searchString.title} /> <div className="card-body"> <h5 className="card-title">{searchString.title}</h5> <p className="card-text"> <strong>Ingredients: </strong>{searchString.ingredients} </p> </div> </div> } const RecipeItem = (props) => { return ( <div className="col-sm-3 mt-4"> <div className="card"> {props.list.map((searchString, index) => <RecipeList searchString = {searchString} key={index} /> )} </div> </div> ) }
RecipeItem初始装入组件时,该组件没有数据,因为您正在执行访存调用。因此,这就是您收到错误的原因。
RecipeItem
您可以添加一个简单的检查,看看是否有数据,然后执行map / filter /或其他任何操作:
{props.list && props.list.map((searchString, index) => <RecipeList searchString = {searchString} key={index} /> )}