【问题标题】:React - Attaching click handler to dynamic childrenReact - 将点击处理程序附加到动态子项
【发布时间】:2015-09-17 16:50:06
【问题描述】:

我正在尝试在使用 react+flux 的电子应用程序中显示播放列表。 由于某种原因,我无法将点击处理程序附加到每个播放列表项。

这是我的代码:

var Playlist = React.createClass({

    render: function() {
        var list = this.props.list;
        var playlist = [];

        for (var i = 0; i < list.length; ++i) {
            playlist.push(
                <PlaylistItem song={list[i]} key={i} />
            );
        }

        return (
            <ul className='playlist'>
                {playlist}
            </ul>
        )
    }

});

var PlaylistItem = React.createClass({

    _play: function() {
        console.log(this.props.song);
    },

    render: function() {
        var song = this.props.song;

        return (
            <li>
                <div className='playBtn'>
                    <i className='fa fa-play' onClick={this._play}>
                    </i>
                </div>
                <div className='info'>
                    <div className='artist'>{song.artist}</div>
                    <div className='title'>{song.title}</div>
                </div>
                <div className='rmBtn'>
                    <i className='fa fa-minus-circle'>
                    </i>
                </div>
                <div className='time'>{song.time}</div>
            </li>
        );
    }

});

我不明白为什么点击处理程序永远不会触发。我希望当单击 i 元素时,我会将歌曲对象发送到控制台。

谢谢。

编辑:我对此进行了一些试验,每次我从商店获取数据(甚至是假数据)时,点击处理程序都不起作用。但是如果我将假数据移动到根组件中,点击处理程序就可以正常工作。

我已多次检查数组中的对象是否相同。

我不明白为什么会发生这种行为。

有人吗?

【问题讨论】:

  • 对我来说似乎工作正常,这是一个小提琴jsfiddle.net/5758b33y。你确实有字体很棒的东西已经在运行了吗?
  • 是的,看起来一切正常,我只是没有让任何点击处理程序在 PlaylistItem 中工作。
  • 在我上面的小提琴中,当我单击播放图标时,我在控制台中收到一条消息,这看起来就像你正在尝试做的那样。你不明白吗?
  • 我可以确认 noveyak 所说的,一切正常。
  • 你找到答案了吗?我也有同样的问题!

标签: javascript reactjs electron


【解决方案1】:

需要绑定onClick方法 onClick={this._play.bind(this)}

【讨论】:

  • Bind 只告诉函数“this”是什么意思,在这种情况下不会帮助我。
  • 实际上这似乎是问题 - clickHandler 失去了对 PlaylistItem 的引用 - 因此可能不知道_play 是什么。通过绑定 this 再次引用 PlaylistItem 并且可以调用该方法。
【解决方案2】:

我自己也遇到过这个问题,解决方法如下:https://stackoverflow.com/a/32623836/852872。希望这对您也有帮助。

从那个页面回答

我还没有做任何更深入的调查,为什么这对我不起作用, 但问题是在我的主文件中我将 React 导入为 require('React'),但在其他组件上如 require('React/addons')。 从 react/addons 到处导入 React 后,一切都像 预计。

【讨论】:

  • 如果此问题与您链接的问题重复,请将其标记为重复。否则,请提供此问题的完整答案,而不是仅提供链接的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2014-04-23
  • 2012-08-01
相关资源
最近更新 更多