当道具孩子在渲染方法之外提交时,React触发整个生命周期

我遇到这样的情况,我需要应用程序的组件根据用户单击按钮来呈现两种状态之一。我遇到的问题是,即使我要更改的只是组件的状态/属性,React也会触发这些组件的整个生命周期。由于遗留限制,我正在使用React 15.6(此应用实际上是嵌入了react的主干),我也无法使用JSX。

props.viewMode ==='ux'|| 'dnd'(基于用户按钮的点击次数)

以下是相关代码:

      render() {
        return this[this.props.viewMode]();
      }

      ux: function() {
        return React.createElement(
          "div",{
            "id":         this.props.node.type,"name":       this.props.node.component
          },**this.props.children**
        );  
      },dnd: function() {
        return React.createElement(
          "div",return React.createElement(
            "div",{
              "id":         this.props.node.type,"name":       this.props.node.component
            },**this.props.children**
          )
        );  
      },

运行此代码时,即使唯一更改的是viewMode,它也会在子级中触发getInitialState()方法,该模式作为道具从链中最高顺序的组件向下传递至子级组件。

似乎在render()方法之外对props.children的任何引用都会触发整个生命周期,从而破坏该组件并创建一个新组件。

如果我这样重构代码:

      render() {
        const children = this.props.children.sort((a,b) => { return a.order > b.order });
        const elem     = this[this.props.viewMode]();

        //assign children to elem,e.g. elem.props.children = children;

        return elem;
      }

      ux: function() {
        return React.createElement(
          "div",**null**
        );  
      },**null**
          )
        );  
      },

React不会在子级中触发getInitialState()方法。

有人知道为什么会这样吗?我想念什么?

zzbb1213 回答:当道具孩子在渲染方法之外提交时,React触发整个生命周期

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2674992.html

大家都在问