反应中的异步 Select 不加载选项
Async Select in react not loading options
我正在尝试使用 React-Select 动态加载 select 字段的选项。这是我的方法 returns 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}]
显然,您的组件在获取数据时不会重新呈现。尝试改用状态。
.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,
});
});
});
};
添加了一个
key
道具
key={options.length}
修复了我在选项稍后更改时不渲染选项的问题。
也可以随意使用这个或类似的方法作为修复。
<AsyncSelect
key={options.length}
loadOptions={options}
/>
我正在尝试使用 React-Select 动态加载 select 字段的选项。这是我的方法 returns 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}]
显然,您的组件在获取数据时不会重新呈现。尝试改用状态。
.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,
});
});
});
};
添加了一个
key
道具
key={options.length}
修复了我在选项稍后更改时不渲染选项的问题。
也可以随意使用这个或类似的方法作为修复。
<AsyncSelect
key={options.length}
loadOptions={options}
/>