add general notes
import React, {Component} from 'react';
class App extends Component {
state = { persons: [ { id: 're3g543fdf' ... }, { id: 'rg98ds453sd' ... } ], }
render() {
let persons = null;
if (this.state.showPersons) {
persons = (
<div>
// REFERENCE TO ARRAY OF OBJECTS IN STATE.. NEED TO CONVERT TO VALID JSX USING MAP
{ this.state.persons.map( person => {
return <Person name={person.name} age={person.age} key={person.id} />
})}
</div>
);
}
return(
<div>
{persons}
</div>
)
}
}
export default App;
const persons = this.state.persons.slice();
const persons = [...this.state.persons];
const persons = this.state.persons;
as objects and arrays are reference types meaning that we will actually get a pointer to the original state and mutate the state directly which is NOT recommendedimport React, {Component} from 'react';
class App extends Component {
state = { persons: [ { ... }, { ... } ], }
// EVENT HANDLER TO MANAGE DELETION OF PERSON COMPONENT
deletePersonHandler = (personIndex) => {
const persons = [...this.state.persons];
persons.splice(personIndex, 1);
this.setState({persons: persons})
}
render() {
let persons = null;
if (this.state.showPersons) {
persons = (
<div>
// PASS INDEX ARGUMENT TO MAP METHOD
{this.state.persons.map((person, index) => {
return (
<Person name={person.name}
age={person.age}
key={person.id}
click={() => this.deletePersonHandler(index)} />
)
})}
</div>
);
}
return(
<div>
{persons}
</div>
)
}
}
export default App;
event.target.value
import React, {Component} from 'react';
class App extends Component {
state = { persons: [ { ... }, { ... } ] }
// ADDED ID PARAMETER
nameChangedHandler = (event, id) => {
// IF PERSON CAN BE FOUND IN THE STATE, WILL RETURN THE INDEX
const personIndex = this.state.persons.findIndex(p => {
return p.id === id;
});
// GRAB PERSON OBJECT BY INDEX
const person = {
...this.state.persons[personIndex];
}
// ASSIGN PERSON NAME TO USER INPUT
person.name = event.target.value;
// UPDATING STATE IMMUTABLY
const persons = [...this.state.persons];
persons[personsIndex] = person;
this.setState({ persons: persons })
}
render() {
let persons = null;
if (this.state.showPersons) {
persons = (
<div>
{this.state.persons.map((person, index) => {
return (
<Person name={person.name}
age={person.age}
key={person.id}
// PASS ID OF PERSON OBJECT TO EVENT HANDLER
changed={(event) => this.nameChangedHandler(event, person.id)} />
)
})}
</div>
);
}
return(
<div>
{persons}
</div>
)
}
}
export default App;
import React from 'react';
const person = (props) => {
return (
<div>
<p>Hi! Im {props.name}</p>
<input type="text" onChange={props.changed} value={props.name} />
</div>
);
}
export default App;