Почему только один из двух объектов из массива передается как реквизит?

введите описание изображения здесьЯ пытаюсь передать реквизит другому компоненту. Данные (событие) поступают из вызова выборки. Я получаю реквизит, но не так, как ожидал. Когда я запустил console.log в willMount, я смог получить только первый объект, а когда я зашел в консоль в функции рендеринга, я получил оба объекта. В идеале я хотел бы получить оба объекта в функции willMount. Может ли кто-нибудь объяснить, почему это происходит, и есть ли способ заставить их обоих войти в систему через консоль willMount? Thaкак называется whoHasGameспасибо.журналы консоли

//PARENT
whoHasGame = (event) => {
        if(event.error){
            return;
        }else{
            console.log("event in MV", event)//console logs correctly
            this.setState({
                leagueInfo: <LeagueCard event={event}/>
            })
        }
    }

    render(){
        return (
            <ScrollView>
                {this.state.leagueInfo}
            </ScrollView>    
            );
    }

  //CHILD
  export default class LeagueCard extends Component {
  constructor(props) {
    super(props);
    this.state = {}
  }


  componentWillMount() { 
    console.log(this.props.event) //only the first object makes it
  };



  render() {
    //console.log(this.props.event)<-- but here both objects make it

    return (
      <View>
        <CardSection>
          <Text>League Name Goes Here</Text>
        {/* <TouchableOpacity onPress={this.display}>
          <Card>
            <CardSection>
              {this.state.matches}
            </CardSection>
          </Card>
        </TouchableOpacity> */}
        </CardSection>
      </View>
    )
  }
}

person Joey Rodrigues    schedule 15.02.2018    source источник
comment
Это componentWillMount или componentDidMount? В очереди. ты сказал didMount. Также, пожалуйста, расскажи, как whoHasGame звонит Дому   -  person RIYAJ KHAN    schedule 15.02.2018
comment
@RIYAJKHAN я буду извиняться. и я также сделал скриншот, как называется whoHasGame.   -  person Joey Rodrigues    schedule 15.02.2018
comment
оба объекта не получают консоль в одном рендере. Они рендерятся один за другим из вашего общего выхода. Пожалуйста, исправьте меня. componentWillMount вызывается только один раз в жизненном цикле. render вызывается для каждого обновления   -  person RIYAJ KHAN    schedule 15.02.2018
comment
@RIYAJKHAN, это правильно. И похоже, это моя проблема.   -  person Joey Rodrigues    schedule 15.02.2018


Ответы (1)


Согласно текущей реализации:

this.setState({
                leagueInfo: <LeagueCard event={event}/>
            })

Первый раз, когда вызывается whoHasGame, вызывается setState. он монтирует компонент LeagueCard с первым объектом.

Так как componentWillMount вызывается только один раз в жизненном цикле, он напечатает этот объект. Он также выводит его в консоль в render.

Теперь снова, когда вызывается whoHasGame, он повторно рендерится со вторым объектом, потому что вызывается setState

На этот раз componentWillMount не вызывается, но снова вызывается render и консоль второго объекта.

Это будет продолжаться до n-го объекта.

Чтобы получить весь объект в первый раз при рендеринге компонента, вам нужно вызвать setState один раз.

В вашем случае setState называется nth временем на основе количества объектов

person RIYAJ KHAN    schedule 15.02.2018