【发布时间】:2019-09-28 17:59:43
【问题描述】:
我对 React 很陌生,我不知道如何区分相同类型的 2 个不同的子组件。
就我而言,我正在尝试构建一个应用程序,允许比较 2 种不同车型在过去 5 年中的价格。
我有 2 个 SelecComponent,在数据库中有汽车制造商作为选项,还有 2 个 SelecComponent,我需要在数据库中为每个选定的汽车制造商列出可用的汽车型号,所以前 2 个 SC 中的每一个应该只控制存储有汽车模型的 2 个 SC 之一。
通常我会通过不同的 ID 识别 SelecComponent 并使用 jQuery 来操作它们,但是在 React 中最好的方法是什么?
父组件:
class App extends Component {
constructor(props) {
super(props);
this.state = {
carProducers: [],
carModels: [],
selectedProducer: null,
selectedModel: null
}
}
//function to retrieve the carmakers in order to initialize the drop down elements in the page
componentDidMount(){
axios.get("/AutoExposed/API/carmakers.php")
.then(response => {
var data = response.data
this.setState({
carProducers: parseCarProducers(data)
})
})
.catch(error => {
console.log(error)
})
}
//function to retrieve the car models once the car producer has been selected
carProducerSelected1 = (selectedValue) =>{
this.setState({selectedProducer: selectedValue}, () =>{
axios.get("/AutoExposed/API/carmodels_GET.php?carmaker=" + this.state.selectedProducer.value)
.then(response => {
var data = response.data
this.setState({
carModels: parseCarModels(data)
})
})
.catch(error => {
console.log(error)
})
})
}
carModelSelected = (selectedValue) => {
this.setState({selectedModel: selectedValue}, ()=>{
console.log(`The car model has just been selected: `, this.state.selectedModel.value)
})
}
render(){
return (
<div className="App">
<div className="container">
<div className="row">
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
<SelectComponent selectOptions={this.state.carProducers} onOptionSelected={this.carProducerSelected}/>
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
<SelectComponent selectOptions={this.state.carProducers} onOptionSelected={this.carProducerSelected}/>
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
</div>
</div>
<div className="row">
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
<SelectComponent selectOptions={this.state.carModels} onOptionSelected={this.carModelSelected}/>
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
<SelectComponent selectOptions={this.state.carModels} onOptionSelected={this.carModelSelected}/>
</div>
<div className="col-lg-3 col-md-6 col-sm-12 col-sm-12">
</div>
</div>
<div className="row">
<div className="col-lg-9 col-md-9 col-sm-12 col-sm-12">
<ChartComp />
</div>
</div>
</div>
</div>
);
}
}
export default App;
子组件:
类 SelectComponent 扩展组件 { 状态 = { 选定选项状态:空, }
optionWasSelected = (selectedOption) => {
this.setState({selectedOtptionState: selectedOption}, () => {
this.props.onOptionSelected(this.state.selectedOtptionState)
})
}
render() {
return (
<Select
value={this.state.selectedOtptionState}
onChange={this.optionWasSelected}
options = {this.props.selectOptions}
/>
);
}
} 导出默认选择组件;
【问题讨论】:
标签: reactjs components