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

反应js:onClick函数从子函数到父函数

许自强
2023-03-14

我用这篇文章作为例子(React way),但它对我不起作用。请指出我的错误,因为我不明白出了什么问题。

这就是我看到的错误:

错误:this.props.on点击不是一个函数

这是我的密码:

// PARENT
var SendDocModal = React.createClass({
  getInitialState: function() {
    return {tagList: []};
  },
  render: function() {
    return (
      <div>
        {
          this.state.tagList.map(function(item) {
            return (
              <TagItem nameProp={item.Name} idProp={item.Id} onClick={this.HandleRemove}/>
            )
          })
        }
      </div>
    )
  },
  HandleRemove: function(c) {
    console.log('On REMOVE = ', c);
  }
});

// CHILD
var TagItem = React.createClass({
  render: function() {
    return (
      <span className="react-tagsinput-tag">
        <span>{this.props.nameProp}</span>
        <a className='react-tagsinput-remove' onClick={this.HandleRemove}></a>
      </span>
    )
  },
  HandleRemove: function() {
    this.props.onClick(this);
  }
});

提前谢谢!

共有2个答案

钮出野
2023-03-14

请尝试以下操作:

    var SendDocModal = React.createClass({
        getInitialState: function() {

            var item = {};
            item.Name = 'First';
            item.Id = 123;

            var item2 = {};
            item2.Name = 'Second';
            item2.Id = 123456;
            return {tagList: [item,item2]};
        },

        HandleRemove: function(c){
            console.log('On REMOVE = ', c);
        },

        render: function() {
            return (<div>
                {this.state.tagList.map(function(item){
                    return(
                            <TagItem nameProp={item.Name} idProp={item.Id} key={item.Id} click={this.HandleRemove}/>
                    )}, this)}
                    </div>
            )       
        }

    });
    // CHILD
    var TagItem = React.createClass({

        handleClick: function(nameProp)
        {
            this.props.click(nameProp);
        },


        render: function(){
            return(
                <span className="react-tagsinput-tag" ><span onClick={this.handleClick.bind(this, this.props.nameProp)}>{this.props.nameProp}</span><a className='react-tagsinput-remove' ></a></span>
            )
        }
    }); 

变化不大:

在tagList映射后添加this。老实说,我不完全确定为什么——也许一个更有经验的程序员可以告诉我们。

为每个TagItem添加了一个键。这是推荐的,控制台将通知您应该这样做,以便如果状态更改,React可以相应地跟踪每个项目。

点击通过道具传递。请参阅React js-创建待办事项列表时遇到问题

霍伟彦
2023-03-14

问题是map中的this回调没有引用React组件,因此this。HandleRemove是未定义的。

您可以通过将第二个参数传递给映射,显式设置值:

this.state.tagList.map(function() {...}, this);

现在,回调内部的this引用与回调外部的this相同的值,即SendDocModal实例。

这与React无关,这只是JavaScript的工作方式。请参见如何在回调中访问正确的this上下文?了解更多信息和其他解决方案。

 类似资料:
  • 问题内容: 我用这个文章为例(做出反应的方式),但它不是为我工作。请指出我的错误,因为我不明白怎么了。 这是我看到的错误: 未捕获的TypeError:this.props.onClick不是函数 这是我的代码: 提前致谢! 问题答案: 问题在于回调内部不引用React组件,因此是。 您可以通过将第二个参数传递给来显式设置值: 现在,回调 内部 的值与回调 外部 (即实例)的值相同。 这与Reac

  • 问题内容: 通过回调函数将数据从子级传递到父级组件,但是不起作用。我在这里做错了什么?将数据从子级传递到父级组件-反应-通过回调函数 https://codepen.io/silentarrowz/pen/GEMQEP?editors=0010 这是代码 问题答案: 有几个问题。 1)你必须绑定 2)是异步的,因此不能保证在传递给时将其设置为所需的值。你可以做 要么 解决该问题。

  • 我正在尝试使用react钩子创建一个悬停以显示div,我遇到了以下问题: 第69:31行:在函数“renderHideOptionalClauseTrigger”中调用React钩子“useState”,该函数既不是React函数组件,也不是自定义React钩子函数React钩子/钩子规则 搜索关键字以了解有关每个错误的更多信息。 以下是我的代码库:

  • 我试图创建一个可以识别父子循环的函数<想象 对象A是对象B的父对象 对象B是对象C的父对象 创建一个可以防止父子循环的函数。该函数应该给出至少两个参数(ChilName、家长名),如果关系创建了一个循环,则会出错。在上面的例子中,如果我们通过(A、C)应该打印或传递字符串: “A是C的父级” 我知道如何创建这个函数(你可以用任何语言提供答案): 我的主要问题是如何在异常中提供正确的消息。(“A是C

  • 问题内容: 我知道都存在一些类似的问题,但是我很难理解今天对这个问题的正确想法并将其推断出我的处境。 我有一个简单的应用程序,ScoreBox有一个ScoreList,其中包含很多分数。我想让Score onClick调用ScoreList handleScoreRemove。我正在显示完整的js文件,但最重要的行是第5行和第77行。 问题答案: 你需要通过 并在组件中这样称呼它

  • 问题内容: 这是我的代码: 当我评估f(0)时,将出现错误“ x在分配之前被引用”。 但是,当我使用“ print x”代替“ x = x + 1”时,它将起作用。 似乎在g的范围内,我只能将x用作“使用事件”,而不能用作“绑定事件”。我想问题是f仅将x的值传递给g。 我是否正确理解?如果不是,有人可以解释为什么在引用之前未定义“ x = x + 1”的左侧吗? 谢谢 问题答案: 您正确理解了它。