Reactjs 反应-如何使用生命周期方法

Reactjs 反应-如何使用生命周期方法,reactjs,Reactjs,我在React中不断遇到同样的问题。我觉得我应该使用生命周期方法。(除了组件将安装和组件将接收道具)。但他们似乎从来没有达到我的目的。以下是两个示例: 异步加载 我的父组件使用AJAX加载一些数据。孙子组件需要这些数据,这些数据通过道具传递。由于时间原因,在安装或未安装子组件时,数据可能可用。我不知道是将代码放在我的孙子组件中,这取决于componentWillMount()或componentWillReceiveProps()中的这些道具。我最后不得不把它放在两个地方。(或者在他们都调用的方

我在React中不断遇到同样的问题。我觉得我应该使用生命周期方法。(除了组件将安装和组件将接收道具)。但他们似乎从来没有达到我的目的。以下是两个示例:

  • 异步加载
  • 我的父组件使用AJAX加载一些数据。孙子组件需要这些数据,这些数据通过道具传递。由于时间原因,在安装或未安装子组件时,数据可能可用。我不知道是将代码放在我的孙子组件中,这取决于componentWillMount()或componentWillReceiveProps()中的这些道具。我最后不得不把它放在两个地方。(或者在他们都调用的方法中)

  • 在初始渲染时调用或不调用生命周期方法。我想让他们两个都去
  • 我的组件获取一些数据。(使用getStateFromFlux-Fluxxor提供的mixin)。在加载数据的过程中,在检索到的数据对象上设置了各种标志:卸载、加载和加载,比如说。此状态更改会导致重新渲染

    我只想在需要显示的情况下渲染和显示数据。因此-我的渲染方法有第一行:

    if data.loadState != 'loaded'
      return '<span />'
    
    最后我想,我使用了生命周期方法

    但是,唉,虽然在某些情况下——当没有数据时——这确实会停止调用渲染,但我仍然无法删除有关渲染的粗糙线条

    if data.loadState != 'loaded'
      return '<span />' 
    
    如果data.loadState!='满载的
    返回“”
    
    这是因为初始渲染未调用shouldComponentUpdate。此组件首次渲染时没有数据。loadState为“已卸载”。仍将调用render方法。我仍然需要避免显示UI(带有空数据字段)

    一般来说,生命周期方法要么仅在初始渲染时调用,要么仅在后续渲染时调用。对于我的大多数用例来说,这是毫无帮助的。我想要一个不知道是第一次渲染还是后续渲染的方法

    我错过了什么?(我能想到的唯一一件事是,当您可以确定数据时,它被设计用于初始渲染服务器端-然后一旦进入浏览器,生命周期方法就可以检测更改)


    谢谢

    你说得对,你应该使用生命周期方法,它们非常棒,让你以更深入的方式连接到你的组件中。但我认为你目前的情况并非如此

  • 只有当数据由父级加载并传递给子级时,才可以有条件地呈现孙子。那你就只需要在孩子身上登记了。它看起来像这样:

    //已传递父级加载的数据的子呈现方法
    render:function(){
    var-grant=null;
    如果(此.props.data){
    孙女=
    }
    返回(
    {孙子}
    )
    }
    
  • 在这种情况下,仅在加载数据后将
    数据
    道具传递给子组件。因此,您可以保证,当孙子组件渲染时,它将具有所需的数据。虽然我不知道为什么您如此反对显示空数据字段,但这应该可以解决问题

  • 您是正确的,无论是否为初始渲染,都没有激发的React lifecycle方法。也就是说,如果必须同时执行这两项操作,则始终可以组合使用
    componentDidMount
    componentdiddupdate
    componentWillReceiveProps
    。我不能100%确定他们为什么这么做,但我想到了几个原因:

    • 确保React在初始渲染之前不需要重新渲染组件(即更改
      componentWillReceiveProps
      中的状态,在初始渲染之前触发更新)。我对代码库不太熟悉,但我很容易看出这会导致问题
    • 初始渲染的性能提升,以便在初始化虚拟DOM时更快地加载内容

  • 我希望这有助于解决您的问题,并为生命周期方法提供一些启示

    你应该使用生命周期方法,这是对的,它们非常棒,可以让你以更深入的方式连接组件。但我认为你目前的情况并非如此

  • 只有当数据由父级加载并传递给子级时,才可以有条件地呈现孙子。那你就只需要在孩子身上登记了。它看起来像这样:

    //已传递父级加载的数据的子呈现方法
    render:function(){
    var-grant=null;
    如果(此.props.data){
    孙女=
    }
    返回(
    {孙子}
    )
    }
    
  • 在这种情况下,仅在加载数据后将
    数据
    道具传递给子组件。因此,您可以保证,当孙子组件渲染时,它将具有所需的数据。虽然我不知道为什么您如此反对显示空数据字段,但这应该可以解决问题

  • 您是正确的,无论是否为初始渲染,都没有激发的React lifecycle方法。也就是说,如果必须同时执行这两项操作,则始终可以组合使用
    componentDidMount
    componentdiddupdate
    componentWillReceiveProps
    。我不能100%确定他们为什么这么做,但我想到了几个原因:

    • 确保React在初始渲染之前不需要重新渲染组件(即更改
      componentWillReceiveProps
      中的状态,在初始渲染之前触发更新)。我对代码库不太熟悉,但我很容易看出这会导致问题
    • 初始渲染的性能提升,让您的内容加载更快,同时虚拟DOM
      if data.loadState != 'loaded'
        return '<span />'