javascript React-select + Inertia.js

izkcnapc  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(131)

我正在使用Inertia.js,我一直很喜欢它。
我有一个问题,无论如何,我似乎不能弄清楚。我有一个选择输入,将包含从数据库中的选项,但其中很多aprox。30/40 k,所以我的想法是只取前20个,然后让用户输入搜索,并带来匹配该结果的前20个。
我所有的后端工作正常,但我的问题是显示更新后的选择选项搜索。
相关代码如下:首先是从react-select包调用AsyncSelect组件。此组件需要一个loadOptions属性,该属性将在用户开始键入时调用函数

<AsyncSelect
    name="proveedores"
    id="proveedores"
    defaultOptions={proveedores}
    loadOptions={handleChange}
 />

被调用的函数是这样的,它接收输入值和一个回调函数,在这个回调函数中,我应该搜索新的数据并返回它

function handleChange(inputValue,callback) {
        setValues(values => ({
            ...values,
            ["search"]: inputValue
        }));

        callback()
    }

问题是要在搜索中加载新数据,我使用的是useEffect

useEffect(() => {
        if (prevValues) {
            const query = pickBy(values)
            Inertia.get(window.location.href, query, {
                replace: true,
                preserveState: true
            });
        }

    }, [values]);

使用useEffect的搜索工作正常,如果我执行console.log,我将看到proveedores的列表已更新,但问题是我如何告诉handleChange函数的回调它应该侦听useEffect并在完成时使用proveedores的新值
如果有人必须使用Inertia + React来做这样的事情(从数据库中搜索数据的React Select),我真的很感激关于如何实现它的一些反馈。
谢谢!

edqdpe6u

edqdpe6u1#

实际上,你可以使用Axios和不使用useEffect,这里有一个例子(对我来说很有效):

const loadOptions = (inputValue, callback) => {
    axios
        .get(route("city.index"), { params: { name: inputValue } })
        .then((res) => {
            callback(res.data)
            );
        });
};
  <AsyncSelect
           cacheOptions
           loadOptions={loadOptions}
           defaultOptions
           id={name}
           name={name}
           onChange={...}
  />

相关问题