未捕获的TypeError:无法在onClick React上读取未定义的属性“openModal”

时间:2017-05-11 14:34:07

标签: javascript reactjs modal-dialog

我正在

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

使用以下反应组件:

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

1 个答案:

答案 0 :(得分:1)

这里:

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"模式。