React - 在地图功能中添加组件不添加

Posted

技术标签:

【中文标题】React - 在地图功能中添加组件不添加【英文标题】:React - Adding component in Map function not adding 【发布时间】:2018-05-05 18:24:28 【问题描述】:

我想通过在数组上使用 map 函数将组件添加到 dom 中。 books.map((book) => <Book/>)

但是,它没有添加任何东西,就好像书籍数组是空的? 我使用console.log(books) 打印书籍,它不是空的。这里有什么问题?我已经附加了我的渲染功能。

  render() 
    let books = this.state.books;
    return (<div className="bookshelf">
      <h2 className="bookshelf-title">this.titles[this.props.shelf]</h2>
      <div className="bookshelf-books">
        <ol className="books-grid">
          books.map((book) => <Book/>)
        </ol>
      </div>
    </div>)
  

对于任何人的信息,我通过 api 调用获取 book 的值。

  componentWillMount() 
    BooksAPI.getAll().then((books) => 
      books.forEach((book) => 
        if (this.state.shelf === book.shelf)
          // console.log(book);
          this.state.books.push(book);
        
      )
    )
  

如果你明白发生了什么,谢谢。

【问题讨论】:

可能 API 调用尚未返回,您正在使用 books 数组。您能否提供更多信息,例如整个文件? @Ajay Gaur Hi Ajay,问题已解决 【参考方案1】:

问题在于您是directly mutating 状态并且它不会重新渲染,因此更改不会反映在您的 DOM 中。使用setState 更新状态

componentWillMount() 
    BooksAPI.getAll().then((books) => 
      const tempBooks = [];
      books.forEach((book) => 
        if (this.state.shelf === book.shelf)
          // console.log(book);
          tempBooks.push(book);
        
      )
      this.setState(prevState => (books: [...prevState.books, ...tempBooks]))
    )
  

【讨论】:

成功了,谢谢!我意识到我不应该直接改变状态! 请不要要求接受答案。你怎么这么不耐烦? 这个方法不对,你确实是在数组里面加一个数组 更新了答案 没关系,我已经回答了我自己的问题【参考方案2】:
render() 
    let books = this.state.books;
    return (<div className="bookshelf">
      <h2 className="bookshelf-title">this.titles[this.props.shelf]</h2>
      <div className="bookshelf-books">
        <ol className="books-grid">
          books.map((book) => return(<Book/>))
        </ol>
      </div>
    </div>)
  

【讨论】:

单行语句不需要return, 不用return【参考方案3】:

这是正确的解决方法。我想将这本书添加到上一个数组中。

  componentWillMount() 
    BooksAPI.getAll().then((books) => 
      books.forEach((book) => 
        if (this.state.shelf === book.shelf) 
          this.setState(prevState => (books: [...prevState.books, book]))
        
      )
    )
  

【讨论】:

以上是关于React - 在地图功能中添加组件不添加的主要内容,如果未能解决你的问题,请参考以下文章

在 React 功能组件中使用 ref 添加测试鼠标事件监听器

React Native - 处理来自子组件(自定义组件)的父状态,而不在父组件中添加功能

如何在不渲染的情况下从 forwardref 组件添加 ref?

使用 react 功能组件添加和删除两个集合

使用 react 功能组件添加和删除两个集合

react.js 之 批量添加与删除功能