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) {
...
}