【发布时间】:2021-11-18 03:47:36
【问题描述】:
我似乎无法获得用于将信息从我的子类传递到我的父类的道具。我想要做的是检测某人选择了哪个下拉菜单选项,将该信息发送到父类,然后父类接受选择的选项并运行对后端的调用,然后返回与所选匹配的数据库项目列表选项。
下面是子类:
import React,{useState} from 'react';
import SEPractices from "../dummydata/SEPractices"
const optionItems = SEPractices.map((SEPractice) =>
<option key={SEPractice.practice}>{SEPractice.practice}</option>
);
const Dropdown = () => {
const [selectValue, setValue] = useState("")
const handleSelect = (e) => {
console.log(e.target.value);
setValue(e.target.value);
this.props.handlePractice(e.target.value);
}
return (
<div>
<select value={selectValue} onChange={handleSelect}>
<option value="dummyData">
Select an SE Practice
</option>
{optionItems}
</select>
</div>
)
}
export default Dropdown;
下面是父类:
import React,{useState} from "react";
import Styles from "../components/tablestyle.js";
import Table from "../components/evidencetable.js";
import tablecolumns from "../components/tablecolumns.js";
import Dropdown from "../components/Dropdown.js";
import axios from "axios";
//const dbArticles = [];
class SEPractice extends React.Component{
/*constructor(props){
this.state = {dbArticles: []};
this.componentDidMount = this.componentDidMount.bind(this);
this.getArticles = this.getArticles.bind(this);
this.practice = this.practice.bind(this);
}*/
state={
dbArticles: []
}
handlePractice (Option) {
console.log("hi");
// axios.get(`https://protected-plains-77403.herokuapp.com/api/articles/${Option}`)
axios.get(`https://localhost:5000/api/articles/${Option}`)
.then((response) =>{
const data = response.data;
this.setState({dbArticles: data});
console.log('state', this.state);
})
.catch(()=>{
alert('error retrieving data');
});
}
componentDidMount = () =>{
this.getArticles();
}
getArticles = () =>{
axios.get('https://protected-plains-77403.herokuapp.com/api/articles')
.then((response) =>{
const data = response.data;
this.setState({dbArticles: data});
console.log('state', this.state);
})
.catch(()=>{
alert('error retrieving data');
});
}
/*practice =() =>{
const [selected, setSelected] = useState('');
const practiceHandler = (e) =>{
setSelected(e);
}
}*/
render() {
return (
<div>
<h2>Select SE Practice to get evidence for the claimed benefits</h2>
<Dropdown onDropdown={this.handlePractice}/>
<Styles>
<Table
data={this.state.dbArticles}
columns={tablecolumns}
/>
</Styles>
</div>
);
}
}
export default SEPractice;
我关注了几篇文章和堆栈溢出博客,他们都说要做 this.props.method 我做了:
const handleSelect = (e) => {
console.log(e.target.value);
setValue(e.target.value);
this.props.handlePractice(e.target.value);
}
【问题讨论】:
标签: javascript reactjs react-props