【发布时间】:2020-04-05 01:12:49
【问题描述】:
我是 React 的新手,我正在尝试改变孩子的父级状态,我有一个人员列表,并且我已经使用 Object.keys 进行了迭代,我需要在每个迭代出现一个按钮并处理来自父级的“添加朋友”功能。
import React, { Component } from 'react';
class People extends Component {
constructor(props) {
super(props);
}
render() {
let friends = this.props.userData;
return (
<div>
<div className="title">
<h1>People You might know</h1>
</div>
<div>
<div>
{Object.keys(friends).map(function (key) {
var friend = friends[key];
return (<div className="userData">
<img src={friend.profilePic} className="profile-photo" alt="userPhoto" />
<div className="data" id="name">
{friend.name}
<br />
<div className="city">
Ciudad: {friend.city}
</div>
</div>
{/* this is the one that isnt working */}
<button onClick={this.props.addFriend}>Add as a friend</button>
</div>);
})}
</div>
</div>
</div>);
}
}
export default People;
这是父组件
import React, { Component } from 'react';
import Profile from './profile';
import People from './people';
import Photo from './meSmall.jpg';
import FriendList from './friendList';
import './App.css';
import './profile.css';
import './people.css';
class App extends Component{
constructor(props){
super(props);
this.state = {
userData: {
name: "User1",
city: "city2",
profilePic: Photo
},
friendList:{
},
peopleList:{
f1:{
name: "Maria",
city: "city3",
profilePic: "./images/f1.jpg",
},
f2:{
name: "James",
city: "city4",
profilePic: "./images/f2.jpg"
}
}
}
this.handleAddFriend = this.handleAddFriend.bind(this);
}
render(){
return (
<div className="App">
<div className="profile">
<Profile userData={this.state.userData}/>
</div>
<div>
<FriendList friendList = {this.state.friendList}/>
</div>
<div className="people">
<People userData = {this.state.peopleList} addFriend={this.handleAddFriend}/>
</div>
</div>
);
}
handleAddFriend(){
this.setState({
friendList:{
f1:{
name: "Maria Almagro",
city: "Cordoba",
profilePic: "./images/f1.jpg",
},
f2:{
name: "Pablo Gramajo",
city: "Cafayate",
profilePic: "./images/f2.jpg"
}
}
})
}
}
export default App;
如果我不把 onClick 和函数放在一起,或者把按钮放在 Object.keys 外面(这个函数效果很好),页面会按我想要的方式显示,但是我需要给每个人添加一个按钮列表,目前我只对人员数据使用静态。 我得到 TypeError: 这是未定义的。我怎样才能做到?
【问题讨论】:
-
在子节点上改变父节点的状态。你真的应该做相反的事情。很高兴阅读:chenglou.github.io/react/docs/lifting-state-up.html
标签: javascript reactjs