json - 无法在 reactJS 中使用 JSON 填充选择下拉列表
问题描述
我正在尝试使用 JSON 在 reactJS 的下拉“选择”中获取键“名称”及其相应的值。但是当我执行我的代码时它不起作用。我附上了我的代码,请看一下!
我尝试使用 componentDidMount 通过 API 调用来获取数据。我是初学者,所以我想弄清楚什么方法可以使它起作用。
class devName extends Component {
state = {
names: [],
selectedName: "",
validationError: ""
}
componentDidMount() {
fetch("http://127.0.0.1:8080/dashboard/get_names")
.then((res) => {
return res.json();
})
.then(data => {
let namesFromAPI = data.map(name => { return { value: name, display: name } })
this.setState({ names: [{ value: '', display: '(Select the site)' }].concat(namesFromAPI) });
}).catch(err => {
console.log(err);
});
}
render() {
return (
<div className="wrapper">
<div className="form-wrapper">
<Toolbar />
<form className="form">
<label className="label1">Select Name from the drop down</label> <hr />
<div>
<Select
value={this.state.selectedName}
onChange={(e) => this.setState({selectedName: e.target.value, validationError: e.target.value === "" ? "You must select a site name" : ""})}>
{/* placeholder="Loading Site List..." > */}
{this.state.names.map((name) => <option key={name.value} value={name.display}>{name.display} </option>)}
</Select>
<div style={{color: 'red', marginTop: '5px'}}>
{this.state.validationError}
</div>
<br />
</div>
<label className="label1">Create New Name From Template</label>
<hr />
<div className="addButton">
<button type="Submit">Add</button> <hr />
</div>
<div className="submitButton">
<button type="submit">Submit</button>
</div>
</form>
</div>
</div>
);
}
}
export default devName;
JSON 代码看起来像:
[
{
"type": "state",
"id": 2131,
"temporaryEle": {},
"name": "First Unit#1234 TON" .. and so on
}
]
没有错误信息。虽然所需的结果应该是“选择下拉填充:”请选择其中一个名称
First Unit#1234 TON
Second Unit#8934 QON
Third Unit#6534 JON
解决方案
编辑: 我已经阅读了您的一条评论,看来您在获取时遇到了 CORS 问题。
在 package.json 文件中添加 baseurl 作为代理
// Package.json
{
...other configs,
"proxy": "http://127.0.0.1:8080"
}
然后你会这样调用你的 fetch :fetch('/dashboard/get_names').then((res) => {...})
供您查看的资源:
https://create-react-app.dev/docs/proxying-api-requests-in-development/
老的:
根据您的 JSON 数据,在将数据映射到componentDidMount
let namesFromAPI = data.map(({name}) => {
return { value: name, display: name }
})
// OR
let namesFromAPI = data.map(name => {
return { value: name.name, display: name.name }
})
推荐阅读
- python - Dask Gateway - Dask 工作人员因 PermissionError 而死
- flutter - 打开 PopupMenuButton 时如何滚动页面 [flutter]
- android - 在 Kotlin 中处理异常的正确方法是什么?
- excel - 将excel函数分配给Excel VBA中的变量
- c - 用多线程 C 分叉一个进程
- wordpress - Woocommerce Membership API - 获取受限内容
- windows - 从 WSL2 内部访问在 Windows 中运行的本地主机?
- python - 用 selenium 定位元素后,你可以追溯/报告元素的 xpath 吗?
- oracle - 我可以使用 ansible 备份 Oracle 和 Hana 数据库吗?
- powerbi - 计算滚动平均值并用于缺失值