reactjs - DropDown 不填充来自 API 调用的数据
问题描述
我是 React 的新手。我正在尝试进行 api 调用,并将数据填充到下拉列表中以做出反应。api 调用成功,我也可以在网络选项卡中看到响应。但响应没有填充到下拉列表中。
我想将 json 响应中的“abc”、“def”等填充到我的下拉列表中。
API 响应
{
{
“ABC”: {
"detail": "/diagnosticWorkflows/abc”
},
“DEF”: {
"detail": "/diagnosticWorkflows/def”
},
“LMN”: {
"detail": "/diagnosticWorkflows/lmn”
},
“PQR”: {
"detail": "/diagnosticWorkflows/pqr”
}
}
用户界面代码
class ABC extends React.Component {
constructor(props) {
super(props);
this.state = {
diagnosticWorkflow: [],
selectedWorkflow: ""
};
}
componentDidMount(nextProps) {
api
.workflowsApi("https://localhost:8443/api/diagnostic-workflows/")
.then(res => {
let workflowFromApi = Object.keys(res).map(workflow => {
return { value: workflow, label: workflow };
});
this.setState({
diagnosticWorkflow: [
{ value: "", label: "(Select Your Workflow)" }
].concat(workflowFromApi)
});
})
.catch(error => {
Console.log(error);
});
}
render() {
return (
<div className={style.searchComponents}>
<div className={style.searchFilter}>
<label>
<span>Diagnostic Requests</span>
</label>
<Dropdown
auto={false}
source={this.state.diagnosticWorkflow}
allowBlank={false}
value={this.state.selectedWorkflow}
onChange={this.updateSearchParameters.bind(
this,
"selectedWorkflow"
)}
className={style.searchFilterDropdown}
/>
</div>
</div>
);
}
}
解决方案
let workflowFromApi = Object.keys(res).map(workflow => {
return { value: workflow, label: workflow };
});
您的此代码可能无法正常工作,因为 res is {{....}}Object.keys(res)
将为空。你能做出这样的回应吗
{
“ABC”: {
"detail": "/diagnosticWorkflows/abc”
},
“DEF”: {
"detail": "/diagnosticWorkflows/def”
},
“LMN”: {
"detail": "/diagnosticWorkflows/lmn”
},
“PQR”: {
"detail": "/diagnosticWorkflows/pqr”
}
}
这样,您的 Object.keys(res) 将返回一个键数组。
推荐阅读
- javascript - 如何根据动态生成的文本调整div高度以扩展?
- java - 以编程方式更改包含标签布局
- c# - 在特定时刻排除特定通知渠道
- if-statement - Lua:将逻辑运算符存储在变量中?
- java - Jackson Json将日期字符串反序列化为java日期
- excel - 文件已存在时如何保存 Excel 工作簿?
- vim - Vim 没有在侧面显示编号
- java - Java - TreeMap 不检索密钥
- typescript - Chutzpah 无法识别任何用 mocha 和 typescript 编写的测试 - 模块系统是 UMD
- reactjs - react-router-v4 NavLink 不重新渲染组件