reactjs - 无法从父反应组件调用子反应组件的属性
问题描述
以下是父反应组件的jsx
代码。我正在尝试将数据从子反应组件传递给父反应组件作为属性(),但它抛出错误为child & parent
generateReport
未捕获的 TypeError:this.props.generateReport 不是 MetricsReport.generateReport 中的函数(metrics-report.jsx:40)
子.jsx
import React, { Component } from 'react';
import {
Row,
Col,
Input,
Collapsible,
CollapsibleItem
} from 'react-materialize';
class MetricsReport extends Component {
constructor(props) {
super(props);
this.state = {
metricsParams: { reportType: '' }
};
this.getReportType = this.getReportType.bind(this);
// Add the below line as per the answer but still facing the problem
this.generateReport = this.generateReport.bind(this);
}
getReportType(event) {
console.log(this.state.metricsParams);
let metricsParams = { ...this.state.metricsParams };
metricsParams.reportType = event.target.value;
this.setState({ metricsParams });
}
generateReport() {
this.props.generateReport(this.state.metricsParams);
}
componentDidMount() {}
render() {
return (
<div class="ushubLeftPanel">
<label>{'Report Type'}</label>
<select
id="metricsDropDown"
className="browser-default"
onChange={this.getReportType}
>
<option value="MetricsByContent">Metrics By Content</option>
<option value="MetricsByUser">Metrics By User</option>
</select>
<button onClick={this.generateReport}>Generate Report</button>
</div>
);
}
}
export default MetricsReport;
父.jsx
import React, { Component } from 'react';
import MetricsReport from '../components/pages/metrics-report';
class MetricsReportContainer extends Component {
constructor(props) {
super(props);
this.generateReport = this.generateReport.bind(this);
}
generateReport(metricsParams) {
console.log(metricsParams);
}
componentDidMount() {}
render() {
return (
<div>
<MetricsReport generateReport={this.generateReport} />
</div>
);
}
}
export default metricsReportContainer;
解决方案
You forgot to bind the context this
inside child component MetricsReport
:
// inside the constructor
this.generateReport = this.generateReport.bind(this);
But you may simply use like this:
<button
onClick={this.props.generateReport(this.state.metricsParams)}
>
Generate Report
</button>
推荐阅读
- javascript - 在某个元素之后查找类,即使它们不是兄弟姐妹
- ios - iOS 13 和水平滚动:原生延迟加载?
- caching - MAMP - 本地主机上的页面不刷新 (PHP 7.3.8)
- java - 使用 Spring Boot 从 Kafka 消费时启动 gradle 项目时出错:“java.lang.IllegalStateException: Error processing condition on ...”
- php - VAR_DUMP 显示结果时未生成 JSON
- c# - 与工厂方法的定义混淆
- c++ - 前向声明函数和 SFINAE
- algorithm - 这个函数的空间和时间复杂度是多少,它根据从尾部的位置获取链表中的节点?
- c# - 直接从 AWS S3 存储桶读取对象并使用 SpreadsheetGear 返回工作簿
- ios - 快速导航控制器在尝试导航到另一个视图控制器时返回 nil