Круто, так что у вас есть список фильмов, и вам просто нужно удалить нужный фильм. Мы попробуем удалить фильм по его индексу в нашем массиве. Мы будем использовать метод array.filter()
. См. Песочницу для справки: https://codesandbox.io/s/intelligent-dan-uskcy
Родитель
class Movies extends React.Component {
constructor(props) {
super(props);
this.state = {
movies: [
{ genre: { name: "Avengers: End Game" }, numberInStock: 100000, dailyRentalRate: 1 },
{ genre: { name: "Harry Potter" }, numberInStock: 20000, dailyRentalRate: 2 },
{ genre: { name: "DBZ" }, numberInStock: 200000, dailyRentalRate: 1}
]
}; // assuming movies is an array
}
handleDelete = movieIndex => {
const { movies } = this.state;
const updatedMovies = movies.filter((movie, index) => {
return index !== movieIndex;
});
this.setState({
movies: updatedMovies
});
};
render() {
return (
<MovieList movies={this.state.movies} handleDelete={this.handleDelete} />
);
}
}
Таким образом, handleDelete()
принимает индекс в качестве аргумента, и мы используем его для создания нового массива фильмов, который не включает фильм с указанным вами индексом.
Затем в .map()
вашего MovieList
компонента мы также будем использовать доступный индексный параметр и передадим этот индекс в обработчик событий props.handleDelete(i)
. Это вызовет функцию handleDelete()
, определенную в родительском компоненте, и обновит состояние.
Дети
const MovieList = (props) =>{
const {movies} = props;
return (
<tbody>
<Fragment>
{movies.map((movie, i) => (
<tr key={i}>
<td>{movie}</td>
<td>{movie.genre.name}</td>
<td>{movie.numberInStock}</td>
<td>{movie.dailyRentalRate}</td>
<td><button className="btn btn-danger btn-sm" onClick={() => props.handleDelete(i)} movie={props.movie}>Delete</button></td>
</tr>
))}
</Fragment>
</tbody>
)
}