【问题标题】:Async React Select component how to change the argument of the loadOptions functionAsync React Select 组件如何更改 loadOptions 函数的参数
【发布时间】:2022-01-04 13:04:51
【问题描述】:

我有一个反应异步选择组件。这个组件有一个loadOptions props,你需要在其中传递一个函数来加载数据。目前看起来是这样的

const MyComponent = () => {
  const [positionId, setPositionId] = useEffect('');

  return (
    {
      positionId &&
      <AsyncSelect
        loadOptions={(search, prevOptions, additional) => loadMyOptions(search, prevOptions, additional, positionId)}
          (...other props)
        />
    }

      <Input
      value={positionId}
      onChange={(e) => setPositionId(e.target.value)}
      />
  )
}

loadMyOptions 函数描述了数据加载逻辑。该函数采用最后一个参数positionId,它根据输入字段中输入的内容而变化。现在,如果您在输入字段中输入一个值,则会出现 AsyncSelect 并加载必要的选项。但是,如果之后您在输入中输入其他内容并更改positionId,并尝试将新数据加载到AsyncSelect,则它不会使用新的positionId 值向后端发送请求。

我试图将函数包装在useCallback

const loadNewOptions = useCallback(
  (search, prevOptions, additional) => {
    return loadMyOptions(search, prevOptions, additional, positionId);
  },
  [positionId]
);

但这并没有帮助。请告诉我如何实现,以便在更改positionId 并单击AsyncSelect 时,新值为positionId 的请求会发送到后端?

【问题讨论】:

标签: javascript reactjs react-select react-async


【解决方案1】:

您的代码中似乎存在竞争条件,但您不必使用“外部”位置 ID,而是使用您传递的位置 ID:

    const loadNewOptions = useCallback((search, prevOptions, additional, posId) => {
      return loadMyOptions(search, prevOptions, additional, posId)
    }, [])

【讨论】:

  • 感谢您的建议!我试过了,但没有用。如果你尝试像这里codepen.io/NailG/pen/oNGdayN 那样做,那么到后端去值 positionId = undefined。我也试过这个选项codepen.io/NailG/pen/bGoMmKr 然后到后端去值 positionId = "" (空字符串)。它采用 setstate 中默认指定的 positionId 值
  • 我还注意到,如果您从输入中手动删除所有值并输入一个新值,那么当该值被擦除并且 positionId === "" 为空字符串时,则从 AsyncSelect 中删除页面,输入新值后,loadNewOptions函数正常工作
  • 但是我需要将实际的 positionId 参数替换为加载数据的函数
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2021-07-15
  • 2023-03-04
相关资源
最近更新 更多