react-select async creatable 不推荐
react-select async creatable does not recommend
我正在尝试将 AsyncCreatableSelect 与示例数据一起使用:
[
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' }
]
我的代码如下所示:
const fetchData = () => {
return new Promise(resolve=>{
resolve([
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' }
])
})
}
const component = () => {
return(
<AsyncCreatableSelect
cacheOptions
defaultOptions
loadOptions={fetchGameList}
/>
);
}
问题是,数据已正确加载,但是当我输入时,与网站上的示例相比,我没有得到任何建议:
无论我输入什么,结果总是一样的。
最好使用 useMemo 或 useCallback 之类的东西,并在该列表中或 return 添加您需要显示的数组。
您可以输入
const data = useMemo(() => { ...code... }, [deps])
在 ...code... 中,您可以键入代码,但在 deps 中,您可以观察一些变量,一旦 deps 发生更改,您的 useMemo 将再次触发...
在您链接的文档中,它包含“filterColors”函数。您需要实现类似或等效的功能,并将“loadOptions”功能的return值包装在其中,方法与它们相同。
import React, { Component } from 'react';
import AsyncCreatableSelect from 'react-select/async-creatable';
import { colourOptions } from '../data';
const filterColors = (inputValue: string) => {
return colourOptions.filter(i =>
i.label.toLowerCase().includes(inputValue.toLowerCase())
);
};
const promiseOptions = inputValue =>
new Promise(resolve => {
setTimeout(() => {
resolve(filterColors(inputValue));
}, 1000);
});
export default class WithPromises extends Component<*, State> {
render() {
return (
<AsyncCreatableSelect
cacheOptions
defaultOptions
loadOptions={promiseOptions}
/>
);
}
}
参考上面的“promiseOptions”,它是用于“loadOptions”的函数。输入值returned被包装在“filterColors”函数中,它进行排序。
如果您的 fetchGameList
已经返回排序列表,那将是最好的。您的后端将进行排序。
我正在尝试将 AsyncCreatableSelect 与示例数据一起使用:
[
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' }
]
我的代码如下所示:
const fetchData = () => {
return new Promise(resolve=>{
resolve([
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' }
])
})
}
const component = () => {
return(
<AsyncCreatableSelect
cacheOptions
defaultOptions
loadOptions={fetchGameList}
/>
);
}
问题是,数据已正确加载,但是当我输入时,与网站上的示例相比,我没有得到任何建议:
无论我输入什么,结果总是一样的。
最好使用 useMemo 或 useCallback 之类的东西,并在该列表中或 return 添加您需要显示的数组。
您可以输入
const data = useMemo(() => { ...code... }, [deps])
在 ...code... 中,您可以键入代码,但在 deps 中,您可以观察一些变量,一旦 deps 发生更改,您的 useMemo 将再次触发...
在您链接的文档中,它包含“filterColors”函数。您需要实现类似或等效的功能,并将“loadOptions”功能的return值包装在其中,方法与它们相同。
import React, { Component } from 'react';
import AsyncCreatableSelect from 'react-select/async-creatable';
import { colourOptions } from '../data';
const filterColors = (inputValue: string) => {
return colourOptions.filter(i =>
i.label.toLowerCase().includes(inputValue.toLowerCase())
);
};
const promiseOptions = inputValue =>
new Promise(resolve => {
setTimeout(() => {
resolve(filterColors(inputValue));
}, 1000);
});
export default class WithPromises extends Component<*, State> {
render() {
return (
<AsyncCreatableSelect
cacheOptions
defaultOptions
loadOptions={promiseOptions}
/>
);
}
}
参考上面的“promiseOptions”,它是用于“loadOptions”的函数。输入值returned被包装在“filterColors”函数中,它进行排序。
如果您的 fetchGameList
已经返回排序列表,那将是最好的。您的后端将进行排序。