小编典典

TypeError:无法读取未定义的属性“ map”-如何访问本地json API中的数组

reactjs

我能够使用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>
    )
}

阅读 223

收藏
2020-07-22

共1个答案

小编典典

RecipeItem初始装入组件时,该组件没有数据,因为您正在执行访存调用。因此,这就是您收到错误的原因。

您可以添加一个简单的检查,看看是否有数据,然后执行map / filter /或其他任何操作:

{props.list && props.list.map((searchString, index) =>
   <RecipeList searchString = {searchString} key={index} />
)}
2020-07-22