Arrays React中的输入自动完成:如何更新UI中的映射数组?
我正在编写一个地址自动完成字段,它使用GooglePlaces自动完成API 我使用React Query在用户键入数据时获取数据,并显示一个Arrays React中的输入自动完成:如何更新UI中的映射数组?,arrays,reactjs,react-query,Arrays,Reactjs,React Query,我正在编写一个地址自动完成字段,它使用GooglePlaces自动完成API 我使用React Query在用户键入数据时获取数据,并显示一个,其中我映射到数组上,并在预测数组出现时输出 所有这些都可以,但是包含获取选项的下拉列表不会显示在UI中,除非我从浏览器窗口单击并返回到地址字段 相关代码: const [placeData, placeIsLoading, placeIsSuccess, placeIsError, placeError] = useFetchPlacesAutocomp
,其中我映射到数组上,并在预测数组出现时输出
所有这些都可以,但是包含获取选项的下拉列表不会显示在UI中,除非我从浏览器窗口单击并返回到地址字段
相关代码:
const [placeData, placeIsLoading, placeIsSuccess, placeIsError, placeError] = useFetchPlacesAutocomplete(address)
const [address, setAddress] = useState()
const [addressAutocomplete, setAddressAutocomplete] = useState(false)
<FormControl id="address" position="relative">
<FormLabel htmlFor="address">Address</FormLabel>
<Input
w="20rem"
mb={8}
value={address}
variant={addressAutocomplete ? "flushed" : "outline"}
list="predictions"
onChange={e => {
setAddress(e.target.value)
handleAutocomplete(e)
}}
/>
{addressAutocomplete && placeIsSuccess &&
<datalist id="predictions">
{placeIsSuccess && placeData.predictions.map(i => (
<option
key={i.description}
onClick={() => {
setAddress(i.description)
setAddressAutocomplete(false)
}}
value={i.description}
/>
))}
</datalist>
}
</FormControl>
const[placeData,placeIsLoading,placeIsSuccess,placeIsError,placeError]=useFetchPlacesAutocomplete(地址)
const[address,setAddress]=useState()
const[addressAutocomplete,setAddressAutocomplete]=useState(false)
地址
{
设置地址(如目标值)
手动自动完成(e)
}}
/>
{addressAutocomplete&&placeIsSuccess&&
{placeIsSuccess&&placeData.predictions.map(i=>(
{
设置地址(即描述)
setAddressAutocomplete(假)
}}
值={i.description}
/>
))}
}
我认为主要的问题是,为什么placeData
变量会随着用户类型的变化而更新,但映射到该数组的结果不会实时显示在UI中
提前谢谢
编辑:
其他信息。我相信我知道它为什么不更新-React作为一个数组接收
placeData
,但是如果该数组的内容发生更改,则该状态不会被视为已更新,因此该组件不会重新渲染。因此,我认为解决方案是在输入字段更改时强制重新渲染,但我还不知道如何做到这一点。解决方案(或至少我的解决方案)是将地址状态的输入作为查询键传递,以便为每次击键生成新的查询。以前,查询键只是一个字符串。如果更新某些状态,将发生重新渲染。因此,可以通过更新某些状态来触发重新渲染。但我首先建议检查您的条件addressAutocomplete&&placeIsSuccess
,以及这是否有效。上一个条件的计算结果是否为true
?还有,placeData.predictions
是什么样子的?如果不知道useFetchplacesautomplete
做了什么,就不可能知道。地址是queryKey的一部分吗?@TkDodo我将地址添加到queryKey中,它工作了,就是这样。它以前只是一个字符串。