jha*_*amm 81 javascript reactjs redux
我有一个我创建的组件:
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);
Run Code Online (Sandbox Code Playgroud)
当我render
这个页面时,我的activatePlaylist
每一个都被称为.如果我喜欢:playlist
map
bind
activatePlaylist
activatePlaylist.bind(this, playlist.playlist_id)
Run Code Online (Sandbox Code Playgroud)
我也可以使用匿名函数:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作.为什么会这样?
Ale*_* T. 161
你需要传递给函数的onClick
引用,当你这样做时,activatePlaylist( .. )
你调用函数并传递给onClick
返回的值activatePlaylist
.您可以使用以下三个选项之一:
1.运用.bind
activatePlaylist.bind(this, playlist.playlist_id)
Run Code Online (Sandbox Code Playgroud)
2.使用箭头功能
onClick={ () => this.activatePlaylist(playlist.playlist_id) }
Run Code Online (Sandbox Code Playgroud)
3.或返回功能activatePlaylist
activatePlaylist(playlistId) {
return function () {
// you code
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这篇文章已经有几年了,但只是为了从https://reactjs.org/tutorial/tutorial.html引用关于这个常见错误的最新 React 教程/文档(我也犯了):
笔记
为了节省输入并避免这种令人困惑的行为,我们将在此处和下面的事件处理程序中使用箭头函数语法:
class Square extends React.Component {
render() {
return (
<button className="square" onClick={() => alert('click')}>
{this.props.value}
</button>
);
}
}
Run Code Online (Sandbox Code Playgroud)
注意 onClick={() => alert('click')} 是如何传递一个函数作为 onClick 属性的。React 只会在点击后调用这个函数。忘记 () => 并编写 onClick={alert('click')} 是一个常见的错误,每次组件重新渲染时都会触发警报。
归档时间: |
|
查看次数: |
35739 次 |
最近记录: |