我正在尝试使用React-Select动态加载选择字段的选项。这是我的方法,该方法在Select中返回loadOptions。
onChange(e) {
console.log("Value Printed : " + e);
if(e.length > 3) {
new Promise(resolve => {
setTimeout(() => {
const url = `http://localhost:3010/cityNames?name=${e}`;
fetch(url)
.then(results => results.json())
.then(data => {
var options = [];
options = data;
console.log("return value from server: " + JSON.stringify(data));
return {options: data};
});
}, 1000);
});
} else {console.log("Enter 3 chars");}
};
但是我的选项没有显示。
这里是渲染组件。
<AsyncSelect
isClearable
loadOptions={this.onChange}
onInputChange={this.onChange}
/>
控制台日志显示正确的结果。 我的数据变量是:
[{"label":"Dallas","value":680780}]
答案 0 :(得分:1)
显然,获取数据时您的组件不会重新呈现。尝试改用状态。
.then((data) => {
this.setState({ options: data });
});
内部渲染:
<Select
isClearable
options={this.state.options}
onInputChange={this.onChange}
/>
顺便说一句,我真的怀疑您必须使用Async React Select。我认为,只要稍作逻辑更改,普通的就足够了。
您的代码应如下所示:
onChange = (inputValue) => {
if (inputValue.length > 3) {
const url = `http://localhost:3010/cityNames?name=${inputValue}`;
fetch(url)
.then(results => results.json())
.then(data => {
this.setState({
options: data,
});
});
});
};