我正在
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')之前没有错误,我在控制台中看到了这个打印:
答案 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"
模式。