Javascript React-如何在导入的函数中使用更高级别的useState

Javascript React-如何在导入的函数中使用更高级别的useState,javascript,reactjs,Javascript,Reactjs,以下代码(为了简洁起见,部分代码被删除)正在运行: function AddressInputList({ isOpen, inputValue, highlightedIndex, getItemProps, getMenuProps }: AutocompleteInputListProps) { const [items, setItems] = useState<MarkerPoint[]>([]) const api = 'XXXX' con

以下代码(为了简洁起见,部分代码被删除)正在运行:

function AddressInputList({
  isOpen,
  inputValue,
  highlightedIndex,
  getItemProps,
  getMenuProps
}: AutocompleteInputListProps) {
  const [items, setItems] = useState<MarkerPoint[]>([])
  const api = 'XXXX'
  const fetchURL = `https://api.opencagedata.com/geocode/v1/json?key=${api}&q=${inputValue}&limit=5&pretty=1`

  useEffect(() => {
    async function fetchData() {
      if (inputValue !== null && inputValue.length > 1) {
        try {
          const request = await axios.get(fetchURL)
          const items = request.data.results.map((res: any) => {
            return {
              lat: res.geometry.lat,
              lng: res.geometry.lng,
              address: res.formatted
            }
          })
          setItems(items)
        } catch (error) {
          console.error(error)
        }
      }
    }
    fetchData()
  }, [inputValue])

  return (/*Code cut out*/)
}

现在我的问题是,我不知道如何使useState钩子
setItems
utility.ts
中可用。我在某个地方读到,这可以通过
道具来完成,但我不确定这会是什么样子。请举一个简短的例子,不胜感激

只需创建一个自定义钩子即可为您获取数据。 我不建议将此钩子与
inputValue
绑定太多。此外,地图格式也感觉不到通用性

export function useFetchData(inputValue: string, fetchURL: string) {
  const [items,setItems] = useState([]);

  useEffect(() => {
    async function fetchData() {
      if (inputValue !== null && inputValue.length > 1) {
        try {
          const request = await axios.get(fetchURL)
          const items = request.data.results.map((res: any) => {
            return {
              lat: res.geometry.lat,
              lng: res.geometry.lng,
              address: res.formatted
            }
          })
          setItems(items)
        } catch (error) {
          console.error(error)
        }
      }
    }
  }, [inputValue]);

  return items;
}
之后,您可以像这样使用此自定义挂钩

const items = useFetchData(inputValue, "/api/<endpoint>);
const items=useFetchData(inputValue,“/api/);

我想您可以将setItems作为回调函数传递,作为fetchData函数的参数传递

fetchData(inputValue: string, fetchURL: string, setItems) {
    ...
}

为什么不将其作为函数的第三个参数,以回调的形式显式传入setter函数呢?通过将fetchData函数转换为自定义函数,可以将useState钩子移动到该fetchData函数hook@jonrsharpe:我该怎么做?你能举个简单的例子吗?对不起,我对编码还不太熟悉,但我正在稳步地学习:)Which部分-向函数中添加参数,调用时传递参数,还有其他事情吗?你现在似乎成功地完成了这些事情。@konekoya我的错,我没有刷新页面。感谢大家的建议,我认为Taras的回答很有帮助!
fetchData(inputValue: string, fetchURL: string, setItems) {
    ...
}