【发布时间】:2022-08-20 01:20:20
【问题描述】:
我有一个用 Laravel 和 jQuery 编写的大型内部 Web 应用程序,并且正在尝试将可重用的 React 组件集成到其中(我是 React 的新手)。
我有一个 CompanySelector 组件正在工作 - 一个使用 axios 从数据库中获取数据并填充列表的选择元素。
当前,当用户从列表中选择一个项目时,它会调用window.getCompanyData(this.state.companies[idx].CompanyID),这是一个加载数据的jQuery 函数——可以工作。
我想用另一个 React 组件替换它,该组件将在选择公司时处理它自己的数据的加载。
公司选择器.jsx
\'use strict\';
class CompanySelector extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null,
isLoaded: false,
companies: [],
value: 0,
index: 0,
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(evt) {
const idx = evt.target.selectedIndex;
this.setState({value: evt.target.value, index: idx});
window.getCompanyData(this.state.companies[idx].CompanyID);
}
componentDidMount() {
axios
.get(\'/api/companies\')
.then((result) => {
this.setState({
isLoaded: true,
index: 0,
companies: result.data.companies.data,
value: 0,
});
})
.catch((error) => {
console.log(error);
});
}
render() {
if (this.state.error) {
return <div>Error: {this.state.error.message}</div>
}
if (!this.state.isLoaded) {
return <div>Loading ...</div>
} else {
return (
<select className=\"form-select\" value={this.state.value} onChange={this.handleChange}>
<option value=\"0\" defaultValue disabled>Select Client</option>
{this.state.companies.map((item, idx) => (
<option key={idx} value={item.CompanyID}>{item.FullCompanyName}</option>
))}
</select>
);
}
}
}
const eleCompany = document.getElementById(\'company-selector\');
const rootCompany = ReactDOM.createRoot(eleCompany);
rootCompany.render(<CompanySelector />);
到目前为止,我的公司数据组件:
\'use strict\';
class CompanyData extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null,
isLoaded: false,
info: null,
};
}
getCompanyData(id) {
alert(\'fetch data\');
}
render() {
if (this.state.error) {
return <div>Error: {this.state.error.message}</div>
}
if (!this.state.isLoaded) {
return <div>Select a company first!</div>
} else {
return (
<ul>
<li>{info.PreviousName}</li>
<li>{info.Industry}</li>
<li>{info.FoundedAt}</li>
</ul>
);
}
}
}
const eleInfo = document.getElementById(\'company-data\');
const rootInfo = ReactDOM.createRoot(eleInfo);
rootInfo.render(<CompanyData />);
如何从 CompanySelector 组件调用 CompanyData 组件的 getCompanyData 函数?
我已经在网上进行了广泛的搜索,但这些示例要么似乎不适合我的用例,要么完全超出我的想象!