Здесь есть два элемента:
i
имеет тип int&&
или «rvalue reference to int
», где «rvalue reference» - имя функции &&
, позволяющее привязать rvalues к ссылке; i
имеет имя, и поэтому выражение, обозначающее его, является lvalue , независимо от его типа или того, что стандартный комитет решил назвать этим типом. :) (Обратите внимание, что выражение , которое выглядит как i
, имеет тип int
, а не int&&
, потому что причины. когда вы начнете использовать параметр, если вы не используете что-то вроде std::move
, чтобы вернуть его.)
Вы получаете там. У вас есть несколько проблем:
Вы определяете arr в addToFavourites, поэтому каждый раз, когда он вызывается, создается новый arr, который доступен только внутри этой функции. По сути, вы создаете массив, добавляете элемент, а затем он выбрасывается в мусор.
Поскольку ваш MovieRow представляет один фильм, вам нужно иметь компонент-обертку, который поддерживает arr как часть своего состояния. Вы также определите здесь addToFavourites и затем передадите это каждому компоненту MovieRow, убедившись, что передали хотя бы идентификатор фильма, чтобы вы знали, какой фильм добавить в избранное
I ' я не уверен, что movieRow в addToFoving делает, потому что вы назначаете его, а затем никогда не используете его. По сути, здесь вы впервые определяете movieRow для объекта глобального окна, а затем переназначаете его при каждом нажатии. Это кажется ненужным.
Вы также захотите переместить pickRandom в родительский компонент, который поддерживает ваш список избранного.
Надеюсь, это заставит вас двигаться в правильном направлении. Дайте мне знать, если у вас есть вопросы
Я думаю, state
- это то, что вы, вероятно, ищете. Вам нужно установить начальное состояние массива в конструкторе, затем обновить его в addToFavourites (используя this.setState) и использовать обновленное состояние в pickRandom. Пожалуйста, обратитесь к документам .
Вы должны сохранить список фильмов в состоянии вашего компонента. Подробнее о состоянии приложения и жизненном цикле компонентов читайте в документации 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} />)
)
}