这种写法很巧妙,值得借鉴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Person.js
import React from 'react';

import './Person.css';

const style = {
backgroundColor: '#e0dede',
margin: "10px 25%",

}
const Person =( props ) => {
return <p style={style}>
{ props.name }<br/><br/>
{ props.age }<br/><br/>
<input type="text" placeholder="改变年龄"
onChange={props.changeAge} /><br/><br/></p>

}

export default Person;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//App.js
import React, { Component } from 'react';
import './App.css';
import Person from './Person/Person';

class App extends Component {
state = {
user:[{id:1,name:"张三",age: "21"},
{id:2,name:"李四",age: "22"},
{id:3,name:"王二麻子",age: "23"}],
showhide: false,
}

toggle = () =>{
this.setState({
showhide: !this.state.showhide
});
}

changeAge = (event,id) =>{
const personIndex = this.state.user.findIndex(p=> {//取出应该被修改的那个人的数据findIndex-寻找下标
return id===p.id
})
const person = {...this.state.user[personIndex]};//取到要修改的那条
person.age = event.target.value;//修改数据
const persons = [...this.state.user];
persons[personIndex] = person;
this.setState({
user: persons
});
}


render() {
let person = null;
if( this.state.showhide ){
person = (
<div>

{
this.state.user.map((person,index) => {
return <Person
name={person.name}
age={person.age}
key={person.id}
changeAge={(event)=>this.changeAge(event,person.id)}>
</Person>
})

}

</div>
)
}

return (
<div className="App">
<button onClick={this.toggle}>切换</button>
{person}
</div>
);
}
}

export default App;