当前位置: 首页 > 面试题库 >

反应“ this”,cloneElement和es6

蒋星雨
2023-03-14
问题内容

我想知道将函数传递给ES6和cloneElement的工作方式。我需要在父组件的状态中this引用状态,但是要引用子组件而不是父组件。

下面是使用常规JavaScript使其正常工作的代码,首先在ES6中编写并敲击键盘后,我决定看看它是否为ES6,因此我进行了重构,效果很好。

我只想在ES6中编写它,因为其他所有内容都使我感到困惑。

这是我在ES5中的组件:

var Parent = React.createClass({
  content: function() {
    return React.Children.map(this.props.children, function(child) {
     return React.cloneElement(child, {
       passThisFunc: this.passThisFunc
     })
    }.bind(this));
  },

  passthisfunc: function(component) {
    // returns the components props
    console.log(this);

    // Returns the component so I can do component.props.name
    console.log(component);
  },

  render: function() {
    return (
      <div>
        { this.content }
      </div>
    )
  }
});

然后在其子节点中:

var Child = React.createClass({
  componentDidMount: function() {
    this.props.passThisFunc(this);
  }

  render: function().....
});

这些组件在ES6中并没有什么不同,实际上this是登录时引用的内容。

重构方面的任何帮助(尤其是父组件)将不胜感激。

编辑 这是我尝试的ES6示例

class Parent extends React.Component {
  content() {
    return React.Children.map(this.props.children, function(child) {
     return React.cloneElement(child, {
       passThisFunc: this.passThisFunc
     })
    }.bind(this));
  }

  passthisfunc(component) {
    // returns the components props
    console.log(this);

    // Returns the component so I can do component.props.name
    console.log(component);
  }

  render() {
    return (
      <div>
        { this.content }
      </div>
    )
  }
};

class Child extends React.Component {
  componentDidMount() {
    this.props.passThisFunc(this);
  }

  render(){...}
};

问题答案:

ES6类已删除具有此React.createClass功能的自动绑定(另请参阅本文)。因此,您现在必须手动进行操作:

…
  content: function() {
    return React.Children.map(this.props.children, function(child) {
     return React.cloneElement(child, {
       passThisFunc: this.passThisFunc.bind(this)
     })
    }.bind(this));
  },
…

但是您实际上不会在ES6中执行此操作。相反,您首先要使用箭头功能,该功能具有词汇this绑定:

class Parent extends React.Component {
  constructor() {
    super();
    this.passthisfunc = (component) => {
      // returns the parent
      console.log(this);

      // Returns the component so I can do component.props.name
      console.log(component);
    };
  }
  content() {
    return React.Children.map(this.props.children, child =>
      React.cloneElement(child, {
        passThisFunc: this.passThisFunc
      });
    );
  }
  …
}


 类似资料:
  • 以 Rax 元素为模板克隆并返回新的 Rax 元素,将传入的 props 与原始元素的 props 浅层合并后返回新元素的 props。新的子元素将取代现有的子元素,而来自原始元素的 key 和 ref 将被保留。 方法 cloneElement(element, [props], [...children]) 参数 type 为类型参数,只能是 Rax 元素,这个参数对于 cloneElemen

  • 问题内容: 自从我对JavaScript和React感到陌生以来,我确实在找出正确的语法方面遇到了问题。 这是我的问题: 应该调用该函数,但不会。我收到此错误,无法找出原因。回调可以正常工作。 当我尝试这种语法时,在编译时会立即出现错误。那是因为电子书吗? 问题答案: 当您使用ES6类而不是React.createClass时,它不会自动绑定 this 。 之所以: React.createCla

  • 问题内容: 我想在切换时更新状态,但在处理程序中未定义对象。根据教程文档,我应该引用该组件。我想念什么吗? 问题答案: ES6 React.Component不会自动将方法绑定到自身。您需要将它们自己绑定到构造函数中。像这样:

  • 我想在react中处理选择的事件,示例如何在普通JS中工作。 因此我为选择创建了react组件:

  • 本文向大家介绍详谈jQuery中的this和$(this),包括了详谈jQuery中的this和$(this)的使用技巧和注意事项,需要的朋友参考一下 网上有很多关于jQuery的this和$(this)的介绍,大多数只是理清了this和$(this)的指向,其实它是有应用场所的,不能一概而论在jQuery调用成员函数时,this就是指向dom对象。 $(this)指向jQuery对象是无可厚非的

  • 问题内容: 我目前正在研究jQuery 对于以下两个示例: 请注意,在第一个示例中,我们用于在每个元素内附加一些文本。在第二个示例中,我们在重置表单时直接使用。 似乎比经常使用。 我的猜测是,在第一个示例中,是将每个元素转换为可以理解功能的jQuery对象,而在第二个示例中,可以直接在表单上调用它。 基本上,我们需要特殊的仅jQuery功能。 这个对吗? 问题答案: 是的,只有在使用jQuery