React-select + Inertia.js

问题描述 投票:0回答:1

我正在使用 Inertia.js,并且我一直很喜欢它。

无论如何,我遇到了一个我似乎无法弄清楚的问题。我有一个选择输入,其中包含数据库中的选项,但其中很多都是大约的。 30/40k 所以我的想法是只取前 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,我将看到更新的 Proedores 列表,但问题是如何告诉 handleChange 函数的回调它应该侦听 useEffect 并在完成时使用新值证明者

如果有人必须使用 Inertia + React 做这样的事情(使用数据库中的搜索数据进行 React Select),我真的很感激一些关于如何实现它的反馈。

谢谢!!

javascript reactjs react-select inertiajs
1个回答
0
投票

实际上,你可以用

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={...}
  />
© www.soinside.com 2019 - 2024. All rights reserved.