Я пытаюсь помещать объекты JSON в массив при каждом нажатии кнопки и отображать результаты

Здесь есть два элемента:

  • Тип: Параметр i имеет тип int&& или «rvalue reference to int», где «rvalue reference» - имя функции &&, позволяющее привязать rvalues ​​ к ссылке;
  • Категория значения: это ключ. i имеет имя, и поэтому выражение, обозначающее его, является lvalue , независимо от его типа или того, что стандартный комитет решил назвать этим типом. :)

(Обратите внимание, что выражение , которое выглядит как i, имеет тип int, а не int&&, потому что причины. когда вы начнете использовать параметр, если вы не используете что-то вроде std::move, чтобы вернуть его.)

0
задан Ryan Graves 5 March 2019 в 15:44
поделиться

3 ответа

Вы получаете там. У вас есть несколько проблем:

  1. Вы определяете arr в addToFavourites, поэтому каждый раз, когда он вызывается, создается новый arr, который доступен только внутри этой функции. По сути, вы создаете массив, добавляете элемент, а затем он выбрасывается в мусор.

    Поскольку ваш MovieRow представляет один фильм, вам нужно иметь компонент-обертку, который поддерживает arr как часть своего состояния. Вы также определите здесь addToFavourites и затем передадите это каждому компоненту MovieRow, убедившись, что передали хотя бы идентификатор фильма, чтобы вы знали, какой фильм добавить в избранное

  2. I ' я не уверен, что movieRow в addToFoving делает, потому что вы назначаете его, а затем никогда не используете его. По сути, здесь вы впервые определяете movieRow для объекта глобального окна, а затем переназначаете его при каждом нажатии. Это кажется ненужным.

  3. Вы также захотите переместить pickRandom в родительский компонент, который поддерживает ваш список избранного.

Надеюсь, это заставит вас двигаться в правильном направлении. Дайте мне знать, если у вас есть вопросы

0
ответ дан Thomas Prince 5 March 2019 в 15:44
поделиться

Я думаю, state - это то, что вы, вероятно, ищете. Вам нужно установить начальное состояние массива в конструкторе, затем обновить его в addToFavourites (используя this.setState) и использовать обновленное состояние в pickRandom. Пожалуйста, обратитесь к документам .

0
ответ дан ladyk 5 March 2019 в 15:44
поделиться

Вы должны сохранить список фильмов в состоянии вашего компонента. Подробнее о состоянии приложения и жизненном цикле компонентов читайте в документации React

class MovieRow extends React.Component {
     constructor(props) {
        this.state = {
            movies: []
        }
     }
}

Затем в методе, который обрабатывает событие click в кнопке Add, вы можете использовать setState () , чтобы обновить состояние, а затем изменения будут отражены в шаблоне.

addToFavourites() {
  const newMovie = getMovie(); // I don't know where are you getting the movie, but you get the idea.
  this.setState((state) => {
    return { 
      movies: [...state.movies, newMovie] 
    }
  });
} 

Затем, учитывая, что вы сохранили в этом состоянии массив объектов, представляющих ваши фильмы. Вы должны сопоставить этот массив со списком компонентов в функции рендеринга.

Пример:

render() {
  return (
    this.state.movies.map((movie) => <MovieComponent key={movie.id} title={movie.title} />)
  )
}
0
ответ дан Juan Rivas 5 March 2019 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: