当前位置: 首页 > 面试题库 >

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

赵佐
2023-03-14
问题内容

我有一个已创建的组件:

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)}

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


问题答案:

您需要传递对函数的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 
  }
}


 类似资料:
  • 我是前端的新手,我正在尝试实现一个简单的功能:检索城市列表,为每个城市渲染一个按钮,并单独捕获它们的点击动作 我得到的列表如下: 并像这样渲染按钮 但是,这些按钮在呈现时将被单击两次,并且如果我之后单击它们,则不会记录任何内容

  • 问题内容: 我将2个值传递给子组件: 要显示的对象列表 删除功能。 我使用.map()函数显示对象列表(如在React教程页面中给出的示例中所示),但是该组件中的按钮在render上触发该函数(不应在渲染时触发)。我的代码如下所示: 我的问题是:为什么函数在渲染时触发,如何使其不触发? 问题答案: 因为您是在调用该函数而不是将函数传递给onClick,所以将该行更改为此: 在ES6中引入了一个称为

  • 我有一个反应组件,它是一种形式。当用户单击发送/提交按钮时,将调用一个函数来处理数据保存并执行一些其他任务。 问题是在用户单击按钮后,组件似乎重新渲染了几次(很可能是因为它从其他组件接收的外部道具更新了)。这本身不是问题。 但是,当组件更新时,即使用户没有再次单击该按钮,也会再次调用函数。 这是我不明白的部分。为什么组件更新时会触发< code>onClick函数?我该如何防止这种情况发生? 我不

  • 问题内容: 我的React组件有问题。我组件的嵌套子代似乎没有渲染。这是我的代码: 我在此文件的顶部有以下两行: 这是我的组件: 我努力了: 以完整的HTML标记调用组件(打开和关闭) 将组件嵌套在组件中(在index.jsx文件中) 我知道嵌套组件是可能的。我已经看到了。由于某种原因,它对我不起作用。 问题答案: 要允许组件包含子项并正确渲染它们,必须使用。这是传递到所有组件与孩子为道具,包含组

  • 我正试图按照本教程学习pygame。我正试图繁殖敌人的物体,但我认为我犯了一个错误,因为没有显示任何东西。 据我所知,我必须创建一个敌人类,然后添加一个事件来添加敌人(ADDENEMY)。当该事件被调用时(由于计时器的作用,每250毫秒一次),它应该会显示一个向左移动的敌人,直到它到达显示的末尾。 我有一组敌人精灵和一组所有精灵,我使用screen.blit和for循环将所有精灵中的每个实体渲染到

  • 问题内容: 为了使用webdriver.io测试我的React应用,我需要使用phantomjs启动它。 起初我以为问题出在webdriver.io,但我意识到当我尝试渲染时PhantomJS返回一个空白页。 为了进行一些测试,我编写了这个javascript文件: 我这样启动: 但是不管我做什么,总是空虚。 我目前使用React 0.14.7和phantomjs 2.1.1。有人对我为什么无法渲