小编典典

为什么在渲染时调用我的onClick?-React.js

reactjs

我有一个已创建的组件:

class Create extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    var playlistDOM = this.renderPlaylists(this.props.playlists);
    return (
      <div>
        {playlistDOM}
      </div>
    )
  }

  activatePlaylist(playlistId) {
    debugger;
  }

  renderPlaylists(playlists) {
    return playlists.map(playlist => {
      return <div key={playlist.playlist_id} onClick={this.activatePlaylist(playlist.playlist_id)}>{playlist.playlist_name}</div>
    });
  }
}

function mapStateToProps(state) {
  return {
    playlists: state.playlists
  }
}

export default connect(mapStateToProps)(Create);

当我打开render此页面时,我的中的activatePlaylist每个页面都会被调用。如果我喜欢:playlist``map``bind
activatePlaylist

activatePlaylist.bind(this, playlist.playlist_id)

我还可以使用匿名函数:

onClick={() => this.activatePlaylist(playlist.playlist_id)}

然后它会按预期工作。为什么会这样?


阅读 190

收藏
2020-07-22

共1个答案

小编典典

您需要传递对函数的onClick 引用 ,当您这样做时activatePlaylist( .. )调用函数并传递给onClick从返回的值activatePlaylist。您可以使用以下三个选项之一:

1 。使用.bind

activatePlaylist.bind(this, playlist.playlist_id)

2 。使用箭头功能

onClick={ () => this.activatePlaylist(playlist.playlist_id) }

3 。或从返回函数activatePlaylist

activatePlaylist(playlistId) {
  return function () {
     // you code 
  }
}
2020-07-22