javascript - 如何告诉父类元素在 ReactJS 中发生了变化?
问题描述
我正在尝试将名为“Others”的列表中的一个元素添加到名为“Favorites”的列表中,反之亦然,一旦我单击“添加到收藏夹”按钮,我对 reactJS 真的很陌生,我正在解决这个纯粹是为了练习目的。
我要做的是创建一个handleClick,将单个联系人的状态从“其他”切换到“收藏”,反之亦然,这是在“用户”组件上完成的,同时调用者是“用户” ” 组件,但是我没有找到一种方法来告诉“用户”组件“用户”已更改并且应该切换列表,这是我现在的代码。
用户
class Users extends Component{
render(){
this.props.users.sort(function(a,b){
if(a.name > b.name){
return 1;
}else{
return -1;
}
})
return(
<div>
<h1>Favorites</h1>
<div>{this.props.users.map(user => <User user={user}
favList = {true}
key={user.id}/>)}</div>
<h1>Others</h1>
<div>{this.props.users.map(user => <User user={user}
favList = {false}
key={user.id}/>)}</div>
</div>
)
}
}
用户
class User extends Component{
StyleCompleted(){
return {
fontSize: '20px',
}
}
constructor(props) {
super(props);
this.state = {isToggleOn: this.props.user.isFavorite
};
// Este enlace es necesario para hacer que `this` funcione en el callback
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(state => ({
isToggleOn: !state.isToggleOn
}));
}
render(){
const {user} = this.props;
const {favList} = this.props;
if (favList==this.state.isToggleOn)
return (
<div >
<img src={UserImage} alt="userPic"/>
{user.name} -
{user.companyName}
<button onClick={this.handleClick}>
<Star star={
this.state.isToggleOn ?
true : false
}/>
</button>
</div>
)
else
return (<h1>Element changes but is not added</h1>)
}
}
星星
class Star extends Component{
render(){
const {star} = this.props;
return (
<img src={
star ? starTrue : starFalse
} alt="star"/>
)
}
}
当我单击一个元素时的预期结果应该是从当前列表中删除它并将其添加到另一个列表中,实际结果只是对当前节点/元素的更改
解决方案
您需要将点击处理程序提升到父函数并在那里管理状态,而不是在单个用户级别。您可以将一个 prop 从父级传递给子级,以便在管理子级的状态时来回传递此信息。然而,这是非常糟糕的做法,因为它创造了两种真理来源的可能性。
推荐阅读
- curl - 在 ansible 中使用 CURL 模型运行 API 命令
- c# - 如何仅保存/更新父实体而不在 asp.net mvc 的 EF6 中保存其子实体?
- git - 用于 C++ 多架构项目的 Git
- azure-devops - 尝试创建代理池时出错
- python - Django 管理页面未打开。我哪里错了?
- metrics - Google Cloud Monitoring Ruby 客户端权限问题
- c# - c#中的字典对象
- python - 通过 API Gateway Lambda AWS- Python 上传多个 pdf 文件
- wordpress - 将 Woocommerce Zoom 添加到自定义库
- sublimetext3 - 如何在 Sublime 中为字符串添加引号?