我有一个已创建的组件:
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
render
activatePlaylist
playlist``map``bind
activatePlaylist.bind(this, playlist.playlist_id)
我还可以使用匿名函数:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
然后它会按预期工作。为什么会这样?
您需要传递对函数的onClick 引用 ,当您这样做时activatePlaylist( .. )调用函数并传递给onClick从返回的值activatePlaylist。您可以使用以下三个选项之一:
onClick
activatePlaylist( .. )
1 。使用.bind
.bind
2 。使用箭头功能
onClick={ () => this.activatePlaylist(playlist.playlist_id) }
3 。或从返回函数activatePlaylist
activatePlaylist(playlistId) { return function () { // you code } }