为什么React组件在渲染时启动onClick事件,而不是在单击时启动?

Jaa*_*rhu 2 javascript reactjs

我有一个像这样的React组件:

import React, { Component, PropTypes } from 'react';
import SubnavActions from '../../actions/subnav-actions';
import FeedActions from '../../actions/feed-actions';

export default class SubnavItemModule extends Component {

  render() {

    return (

      <div className={'item ' + this.props.active} thumbImg={this.props.thumbImg} _text={this.props._text} _id={this.props._id} onClick={this.handler}>
        <p>{this.props._text}</p>
      </div>
    );
  }

  handler() {

    console.log('subnav-filter-item-module handler launching');
  }
};
Run Code Online (Sandbox Code Playgroud)

onClick {this.handler}以前曾经工作过,但现在每次呈现组件时它都会启动onClick事件.

如果我点击它,没有任何反应.

在其他演示中,我成功地使用了onClick = {e => this.handler(e)},但在这项工作中没有任何反应.

在此之前我开始使用Babel 6和Babelify,但我无法真正理解这是什么原因造成的.早些时候我使用了Reactify.所以我的问题如下:

  • 在这里启动onClick事件的正确方法是什么?
  • 为什么它在渲染时启动?
  • 这与Babelify/Reactify有关吗?如果是这样,怎么样?

EDITS:

更正了原始代码示例.

这是父模块:

http://pastebin.com/rSKf4wR8

如果你想知道为什么我的写法不同(使用import而不是require),我正在改变语法.如果你问为什么,好吧,我不知道.我只是尝试按照一些教程,看看别人怎么写.我甚至不知道require和import之间的区别.

而且,我刚刚意识到了什么.这可能是因为我没有在父母那里传递任何作为道具的功能吗?

有人与Rails应用程序有类似的问题,这是否提供更多信息:当条件表达式中使用道具时,React rails app不执行onClick处理程序

Ale*_* T. 5

在你的情况下你call运作,但你需要传递onClick给函数的引用

onClick={ this.handler }
Run Code Online (Sandbox Code Playgroud)

Example

如果你需要将一些参数传递给处理程序,你可以使用.bind,就像这样

onClick={ this.handler.bind(this, 100) }

handler(x) {}
Run Code Online (Sandbox Code Playgroud)

Example

或者 arrow function

onClick={ () => this.handler(100) }
Run Code Online (Sandbox Code Playgroud)