javascript - React/material ui raisebutton 在 init 上执行 onTouchTap

标签 javascript reactjs

我正在使用react/redux/material ui,通常在我的网站上,组件工作正常。其中一页发生了一些非常非常奇怪的事情。

我创建了一个像这样的组件:

class MyOwnComponent extends Component {
  doSomething = (id) => {
    alert('doSomething: id = ' + id )
  }

  render() {
    return (
      <RaisedButton secondary={true} label={'My label'} onTouchTap={this.doSomething(id)}/>
    )
  }
}

我有一个来自 Material ui 的凸起按钮,并将其放入渲染方法中。

问题是,当页面加载其中的组件时,会调用 doSomething 方法。即使它只在raisedbutton的onTouchTap中被调用。几乎就像 raisebutton 中的错误是在单击按钮时立即调用 onTouchTap 方法。

有人对这种奇怪的行为有解释吗?

谢谢

最佳答案

您将给 onTouchTap void ,因为这就是 this.doSomething(id) 返回的内容。

this.doSomething(id) 

在第一次呈现 MyOwnComponent 时执行。

相反,你应该这样做:

class MyOwnComponent extends Component {
  doSomething = () => {
    const {id}  = this.props.object;
    alert('doSomething: id = ' + id )
  }

  render() {
    return (
      <RaisedButton secondary={true} label={'My label'} onTouchTap={this.doSomething}/>
    )
  }
}

关于javascript - React/material ui raisebutton 在 init 上执行 onTouchTap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43732845/

相关文章:

javascript - 如何在按键事件上运行一个函数

javascript - 有什么方法可以停止页面加载直到加载图像(预加载器)

javascript - 将元素添加到在js中迭代的同一个数组

javascript - 如何在 ReactJS 中使用 ref 触发动画

javascript - react Hook 。单击时如何使其他项目(当前项目除外)停用

reactjs - 如何在 Gatsby 站点的 iframe 中渲染带有 Emotion 样式的 React 组件?

javascript - 更改链接悬停时的另一张图像

javascript - 如何使用节点和 .createElement ("b") 使文本加粗?

javascript - 列表内的渲染按钮

reactjs - React 应用程序的 CloudFront 缓存失效