为啥数组中的两个对象中只有一个作为道具传递?

Posted

技术标签:

【中文标题】为啥数组中的两个对象中只有一个作为道具传递?【英文标题】:Why does only one of the two objects from array get passed as prop?为什么数组中的两个对象中只有一个作为道具传递? 【发布时间】:2018-02-15 04:22:11 【问题描述】:

Im 试图将 prop 传递给另一个组件。数据(事件)来自 fetch 调用。我确实得到了道具,但不是我期望的那样。 当我控制台登录 willMount 时,我只能获得第一个对象,而当我控制台登录渲染功能时,我确实收到了两个对象。理想情况下,我想在 willMount 函数中获取这两个对象。任何人都可以解释为什么会发生这种情况,以及他们是否是一种让他们都控制台登录 willMount 的方法? Thank 你.

//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>
    )
  

【问题讨论】:

componentWillMount 还是 componentDidMount ?在阙。你说didMount。另外请分享whoHasGame 如何与dom联系 @RIYAJKHAN 它会安装我的道歉。我还截屏了 whoHasGame 的调用方式。 两个对象都没有在一次渲染中获得控制台。它们正在从您的共享输出中逐一渲染。请纠正我。componentWillMount 在生命周期中仅调用一次。render 为每次更新调用 @RIYAJKHAN 这是正确的。这似乎是我的问题。 【参考方案1】:

根据当前的实现:

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

第一次调用whoHasGame时,调用setState。它使用第一个对象安装组件LeagueCard

由于componentWillMount 在生命周期中仅被调用一次,它会打印该对象。它还会在render 中对其进行控制台。

现在,再次调用 whoHasGame 时,由于调用了 setState,它会使用第二个对象重新渲染

这一次,componentWillMount 没有被调用,但render 再次被调用并控制第二个对象。

它将持续到第 n 个对象。

要在组件第一次渲染时获取所有对象,您需要调用一次setState

在您的情况下,setState 被称为 nth 时间基于对象计数

【讨论】:

以上是关于为啥数组中的两个对象中只有一个作为道具传递?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Reactjs 中的 useEffect 挂钩访问道具

传递颜色作为道具

如何将从父组件传递的道具推送到子组件中的数组?

为啥 Vue 不读取我通过 PHP 作为道具传递的整个 JSON 对象?

如何在vue中将不同值的数组作为道具传递

将数组数组作为道具传递