Как отобразить 2 массива одновременно и обновить массивы в соответствии с условиями в responsejs

pranami спросил: 13 октября 2017 в 06:02 в: javascript

В React я передаю данные из родительского компонента в дочерний компонент. Оба компонента имеют свое собственное индивидуальное состояние с массивом книг.

Я передаю массив книг родительского компонента в дочерний компонент. Я могу добавить книгу из дочернего компонента в родительский компонент.

В дочернем компоненте мне нужно выполнить условие: если массив books дочернего компонента имеет элемент, который уже присутствует в массиве books родительского компонента, тогда мне нужно обновить одно свойство массива books в дочернем компоненте.

Итак, как мне сопоставить оба массива и проверить мое состояние?

Я пробовал использовать приведенный ниже код, и это не работает. Я знаю, что приведенный ниже код не является правильным способом, но я не могу понять, как действовать

let parent_books = this.props.books;
  this.state.child_books.map((book,index) => {
      if(book === parent_books[index])
          book.shelf = parent_books[index].shelf    }) 

Итак, массив родительских книг будет иметь мало книг, которые уже есть в массиве дочерних книг.

Итак, я хочу проверить, есть ли в массиве родительских книг книга, которая присутствует в массиве дочерних книг, а затем я хочу установить для свойства полки этого массива дочерних книг любое значение. свойство книги в массиве родительских книг.

Все книги в дочернем компоненте имеют начальное свойство полки"Нет".

Кто-нибудь может подсказать, как поступить с этим?

РЕДАКТИРОВАТЬ

Я пытаюсь реализовать код в приведенной ниже функции. Но я сталкиваюсь с некоторыми проблемами при использовании setState. Код:

updateSearch = (searchString) => {
    let parent_books = this.props.books;
    this.setState({search: searchString.trim()})
    let searchResults = BooksAPI.search(this.state.search,1).then((book_search) => {
      if (book_search != undefined) {
        console.log(book_search)
          book_search.map((book) => book.shelf = 'none')
          this.setState({ books : book_search })
          console.log(this.state.books) //Gives the array of state
        }
    })    console.log(this.state.books) //Gives an empty array
    this.state.books.map((book) => {
      const parent = parent_books.find(parent => parent === book );
      if(parent) {
        console.log(book.title);
        book.shelf = parent.shelf
      }
    })
  }

Второй файл console.log не возвращает массив книг в состоянии, для которого функция map после этого не выполняется. Что я делаю неправильно?


0 ответов