javascript - 未捕获的类型错误 : Cannot read property 'openModal' of undefined at onClick React

标签 javascript reactjs modal-dialog

我正在获取

   Uncaught TypeError: Cannot read property 'openModal' of undefined
        at onClick

具有以下 react 组件:

class ReactReduxTabs extends React.Component {
  constructor(props){
      super(props);
      this.openModal = this.openModal.bind(this);
      this.closeModal = this.closeModal.bind(this);
      this.render_response_json_modal = this.render_response_json_modal.bind(this);
      this.state = {tabIndex: 1, isModelOpen: false, modalText: "blah blah blah"};
  }

  openModal() {
    console.log("open modal");
    this.setState({ isModalOpen: true })
  }

  closeModal() {
    this.setState({ isModalOpen: false })
  }

  render_response_json_modal(headers, target_header) {
      return add_rendering(
          headers,
          target_header,
          function(val, row) {
              return (<p onClick={() => {this.openModal()} }>yaaaaaaa</p>)
          }
      )
  }

render() {

      if (orderMetricsFetched == true) {

        order_metrics.error_report_failed_orders.headers = this.render_response_json_modal(order_metrics.error_report_failed_orders.headers, 'RESPONSE', this.openModal)

        return (

<div className="card">
                      <ReduxDataTable data={order_metrics.error_report_failed_orders}/>
                    </div>

add_rendering 的作用是采用类似的内容

headers = ['Header 1', 'Header 2']

如果您的目标标题 1 更改为

headers= [
  {title: 'Header 1', render: function() { ...returns what should go in the table cell...} },
  'Header 2'
]

问题似乎出在单击表格单元格时的 this 上下文。单击表格单元格时,它应该调用组件的 openModal 方法。

好消息是它非常接近,表格按其应有的方式呈现,每个 RESPONSE 列单元格内部都有随机的“yaaaaa”,证明 add_rendering render_response_json_modal 有效。在我单击每个 RESPONSE 单元格(“yaaaa”之一)之前,不会出现任何错误,我会在控制台中看到以下打印内容:

enter image description here

最佳答案

这里:

return (<p onClick={() => {this.openModal()} }>yaaaaaaa</p>)

this 指的是函数作用域而不是外部作用域(这就是您想要的),快速修复方法是在函数外部保存 this 的引用并使用那个。

var self = this;   
return add_rendering(
  headers,
  target_header,
  function(val, row) {
     return (<p onClick={() => {self.openModal()} }>yaaaaaaa</p>)
  })
);

顺便说一句,异常表明 this 在函数内部未定义,可能是因为您使用的是“use strict” 模式。

关于javascript - 未捕获的类型错误 : Cannot read property 'openModal' of undefined at onClick React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918468/

相关文章:

css - Vue-js-modal 可调整大小问题

c# - Winforms:在对话框外单击时关闭模式对话框

javascript - 如何确定我在客户端的登录状态? [完成的]

javascript - 如何使用带有 jQ​​uery 或 JavaScript 的按钮刷新变量

javascript - 我想在 Angularjs 表中显示此 Json 数据

javascript - 在 React 函数中运行 setInterval() 会发生多次,并且随着时间的推移数量会迅速增加

css - React-Toolbox:尝试水平对齐卡片

javascript - JS/ Ajax : grab input field value without refresh or button click

javascript - 使用 React Native 获取数据错误

javascript - IE7 模态对话框 - 定位错误?