Я в самом начале обучения реагирую, и мне тоже нужно принять состояние от корневого компонента к ребенку ребенка, могу сказать.
У меня есть файл App.js, который имеет состояние, это массив игроков.
Затем у меня есть Home.js, который я импортирую в App.js, а затем у меня есть компонент Players.js, который должен отображать этот объект игроков.
/ * App.js * /
class App extends Component {
state = {
players: [
{name: 'Kacper', gender: 'M', id: 1},
{name: 'Patrycja', gender: 'F', id: 2},
{name: 'Marcel', gender: 'M', id: 3},
{name: 'Wiktoria', gender: 'F', id: 4}
]
}
deletePlayer = (id) => {
const players = this.state.players.filter(player => {
return player.id !== id
})
this.setState({
players
})
}
render(){
return (
<div>
<Home players={this.state.players} deletePlayer={this.deletePlayer}/>
</div>
);
}
}
export default App;
/ * Home.js * /
class Home extends Component {
state = {
players: players
}
render(){
return (
<div className="add-players">
<Players players={this.state.players}/>
<div className="add-player"></div>
<button className="start-btn">
<i className="material-icons">play_arrow</i> <p>Let's play!</p>
</button>
</div>
);
}
}
export default Home;
/ * Players.js * /
const Players = ({players, deletePlayer}) => {
const playerList = players.length ? (
players.map(player => {
return (
<div className="player" key={player.id}>
<div className="gender">{player.gender}</div>
<span>{player.name}</span>
<i className="material-icons" onClick={() => {deletePlayer(player.id)}}>close</i>
</div>
)
})
) : (
<p>Add player</p>
)
return (
<div className="players">
{playerList}
</div>
)
}
export default Players;