Javascript 将列表子项传递给父项
您需要通过回调传递movie元素。仅将子组件更改为:Javascript 将列表子项传递给父项,javascript,reactjs,jsx,Javascript,Reactjs,Jsx,您需要通过回调传递movie元素。仅将子组件更改为: I am new to React and trying to understand the basics. I have a child component called movieList that return a list of movies in a table form. const movieList = () =>{ const {movies} = pro
I am new to React and trying to understand the basics. I have a child component called movieList that return a list of movies in a table form.
const movieList = () =>{
const {movies} = props;
return (){
<tbody>
<Fragment>
{movies.map((movie, i) => (
<tr key={i}>
<td>{movie.title}</td>
<td>{movie.genre.name}</td>
<td>{movie.numberInStock}</td>
<td>{movie.dailyRentalRate}</td>
<td><button className="btn btn-danger btn-sm" onClick={props.onClick} movie={props.movie}>Delete</button></td>
</tr>
))}
</Fragment>
</tbody>
} }
之后,需要将回调中的数据传递给父函数中的函数
onClick={() => props.onClick(movie)}
或者只是
onClick={movie => this.handleDelete(movie)}
然后,您需要做的就是从您所在州的列表中删除该电影。React然后将从DOM中删除该元素:
onClick={this.handleDelete}
酷,所以你有一个电影列表,你只需要删除正确的电影。我们将尝试通过数组中的索引删除电影。我们将使用array.filter方法。请参见沙盒以获取参考:
父母亲
嗨,Olasunkanmi,请尝试下面的解决方案,如果有帮助,请告诉我:
handleDelete = (movie) => {
const { movies } = this.state;
const newMoviews = movies.slice();
newMovies.splice(newMovies.findIndex(m => m.title === movie.title), 1)
this.setState({ movies: newMovies });
}
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} />
);
}
}
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>
)
}