gpt4 book ai didi

javascript - 需要 Reactjs 帮助如何正确地将此功能从父按钮组件传递到子按钮组件

转载 作者:行者123 更新时间:2023-11-29 20:51:20 25 4
gpt4 key购买 nike

reactjs 的全新内容,请多多包涵。
- 我有一个返回表格的 MovieContainer 组件。
- 我有一个子 MovieCell 组件,它将放置在 MovieContainer 内并迭代对象数组。单元格内部是一个删除按钮,它将过滤列表数组以删除单击的项目
- 我在 MovieContainer 组件中准备了删除功能,但我不确定将其传递给 child 的正确方法。

github link
电影容器组件:

class MoviesContainer extends Component {
constructor(props) {
super(props);

this.state = {
movies: getMovies()
};

this.deleteMovie = this.deleteMovie.bind(this);
}

deleteMovie(movie) {
const movies = this.state.movies.filter(m => m._id !== movie._id);
this.setState({
movies: movies
});
console.log(this);
}

render() {
return (
<table className="table">
<thead>
<tr>
<th>Title</th>
<th>Genre</th>
<th>Stock</th>
<th>Rate</th>
</tr>
</thead>
<tbody>
{this.state.movies.map(movie => (
<MovieCell
key={movie._id}
title={movie.title}
genre={movie.genre.name}
numberInStock={movie.numberInStock}
dailyRentalRate={movie.dailyRentalRate}
deleteMovie={this.deleteMovie}
/>
))}
</tbody>
</table>
);
}
}

MovieCell 组件:

class MovieCell extends Component {
constructor(props) {
super(props);

this.handleDelete = this.handleDelete.bind(this);
}

handleDelete(movie) {
this.props.deleteMovie(movie);
}

render() {
const title = this.props.title;
const genre = this.props.genre;
const numberInStock = this.props.numberInStock;
const dailyRentalRate = this.props.dailyRentalRate;

return (
<tr>
<td>{title}</td>
<td>{genre}</td>
<td>{numberInStock}</td>
<td>{dailyRentalRate}</td>
<td>
<button onClick={movie => this.handleDelete(movie)}>Delete</button>
</td>
</tr>
);
}
}

最佳答案

您当前将 event 命名为 movie 并将其用作您的电影对象,这将无法按预期工作。

您可以改为将电影 ID 作为 Prop 传递,并在调用 handleDelete 时使用它而不是 event

class MoviesContainer extends Component {
// ...

deleteMovie(movieId) {
const movies = this.state.movies.filter(m => m._id !== movieId);
this.setState({
movies: movies
});
}

render() {
return (
<table className="table">
<thead>
<tr>
<th>Title</th>
<th>Genre</th>
<th>Stock</th>
<th>Rate</th>
</tr>
</thead>
<tbody>
{this.state.movies.map(movie => (
<MovieCell
key={movie._id}
id={movie._id}
title={movie.title}
genre={movie.genre.name}
numberInStock={movie.numberInStock}
dailyRentalRate={movie.dailyRentalRate}
deleteMovie={this.deleteMovie}
/>
))}
</tbody>
</table>
);
}
}

class MovieCell extends Component {
// ...

handleDelete() {
this.props.deleteMovie(this.props.id);
}

render() {
const title = this.props.title;
const genre = this.props.genre;
const numberInStock = this.props.numberInStock;
const dailyRentalRate = this.props.dailyRentalRate;

return (
<tr>
<td>{title}</td>
<td>{genre}</td>
<td>{numberInStock}</td>
<td>{dailyRentalRate}</td>
<td>
<button onClick={this.handleDelete}>Delete</button>
</td>
</tr>
);
}
}

关于javascript - 需要 Reactjs 帮助如何正确地将此功能从父按钮组件传递到子按钮组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51730398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com