Получение состояния от корневого компонента - response.js - PullRequest
0 голосов
/ 20 июня 2019

Я в самом начале обучения реагирую, и мне тоже нужно принять состояние от корневого компонента к ребенку ребенка, могу сказать. У меня есть файл 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;

1 Ответ

1 голос
/ 20 июня 2019

Вы передали состояние игрока корневого компонента как свойство Home. Таким образом, вы должны получить к нему доступ с props.

Просто обновите ваш Home компонент до следующего:

class Home extends Component {
  render(){
    return (
     <div className="add-players">
      <Players players={this.props.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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...