当前位置: 首页 > 知识库问答 >
问题:

如何从父组件重写子组件的事件处理函数react.js

严兴旺
2023-03-14
/** @jsx React.DOM */

var Button = React.createClass({
  handleClick: function(){
    console.log(' FROM BUTTON')
  },
  render: function() {
    return <input type='button' onClick={this.handleClick} value={this.props.dname}/>;
  } 
});

var Text = React.createClass({
  render: function() {
    return <input type='text' onClick={this.handleClick} value={this.props.ival}/>;
  } 
});


var search = React.createClass({
  handleClick: function() {
    console.log('searching')
  },
  render: function(){
    return (
      <div>
        <Text/>
        <Button dname={this.props.dname} onClick={this.handleClick} />
      </div>
    );
  }
});

React.renderComponent(<search dname='Look up' fname='Search'/> , document.body);

我已经创建了一个按钮和文本组件,并将它们包含在搜索组件中。现在,我想用搜索组件的处理程序覆盖按钮的默认handleClick事件。但this.handleClick指向按钮组件的事件处理程序。。请帮忙。。我需要从搜索中单击,而不是从按钮中获取。。

共有3个答案

龚永新
2023-03-14

或者如果你能同时处决他们,你可以把

class Button extends React.Component {


handleClick = () => {
console.log("from buttom");

if (this.props.hasOwnProperty('onClick')){
   this.props.onClick();
}

};

您将检查对象是否具有指定的属性并运行它

游勇军
2023-03-14

您需要更改您的Button组件以允许这样的行为:

var Button = React.createClass({
  handleClick: function(){
    console.log(' FROM BUTTON')
  },
  render: function() {
    return (
      <input type='button'
        onClick={this.props.onClick || this.handleClick}
        value={this.props.dname} />
    );
  }   
});

注意onClick={this.props.onClick | | this.handleClick}

这样,如果在实例化按钮时传递onClick属性,它将优先于按钮的handleClick方法。

罗业
2023-03-14

你有99%在那里。

React使用单向数据流。因此,嵌套组件上的事件不会传播到其父级。

您必须手动传播事件

更改您的

var Button = React.createClass({
  handleClick: function () {
    this.props.onClick();
  },

  ...

});

附件是你原来的帖子的一部分,附有必要的修改。现在,它不再从按钮记录,而是提醒搜索

http://jsfiddle.net/chantastic/VwfTc/1/

 类似资料:
  • 我有一个在父组件中生成的事件,子组件必须对此作出反应。我知道在中不建议使用这种方法,我必须执行emit,这非常糟糕。所以我的代码是这个。 正如您所看到的,在无限滚动上被触发,事件被发送到子组件搜索。不仅仅是搜索,因为它是根,所以它正在向每个人广播。 什么是更好的方法。我知道我应该使用道具,但我不知道在这种情况下我该怎么做。

  • 父组件中如何处理子组件内点击事件

  • 在Vue 2.0中,文档和其他文档清楚地表明,父母与孩子之间的沟通是通过道具进行的。 父母如何通过道具告诉孩子事情发生了? 我应该看一个叫事件的道具吗?这感觉不对,替代方案也不对(/是子元素到父元素的,中心模型是远程元素的)。 我有一个父容器,它需要告诉它的子容器,可以在API上执行某些操作。我需要能够触发函数。

  • 我有3个组件:、和。组件负责呈现,但其方式不同。 的render函数在运行时之前静态声明,如下所示: 而则处理在运行时动态接收和呈现,如下所示: 和都具有侦听器,以便在单击时更改其状态和重写器。我注意到,当单击时,它和都将被重新呈现。但是当我单击时,将只重新呈现父级,而不是。 是一个没有的功能组件,所以我不明白为什么它不能重播。有人能解释一下为什么会这样吗?我在与这个用例相关的文档中找不到任何东西

  • 我在用vue-cli支架做网页包 我的Vue组件结构/传家宝目前看起来如下: 应用程序 在应用程序级别,我需要一个vuejs组件方法,该方法可以将子组件的所有数据聚合到一个JSON对象中,然后发送到服务器。 有没有办法访问子组件的数据?具体来说,多层深? 如果没有,传递oberservable数据/参数的最佳实践是什么,这样当子组件修改它时,我就可以访问新的值?我试图避免组件之间的硬依赖关系,所以

  • 编辑:我已经采取了一种不同的方法来解决这个问题:根据接受的答案,在上检索父组件中的动态子组件值。 我正在尝试让父组件发出一个Event/Observable,以便它的子动态组件在侦听这样的事件时触发一个动作。 我已经了解到,在动态组件中使用或修饰符是不可能的,所以... 这是我用例的大纲: 动态子组件由一组4个输入元素组成。(完成) 父组件具有按钮,用于添加动态子组件。此按钮可用于添加动态子组件的