目前,每次查询参数更新时,我的代码都会重新渲染。但是一旦我删除查询参数,就会收到一个警告:“React Hook useCallback has a missing dependency: 'query'. Either include it or remove the dependency array react-hooks/exhaustive-deps”。 我尝试在useEffect中定义我的getData函数,但我将getData用作useEffect之外的onclick函数。 我想要完成的目标是,在react hooks上最初获取文章,然后仅在提交时获取新数据,而不是在查询更新时获取,并且没有任何有关“查询”缺少依赖项的警告。 任何建议都会帮助极大。代码如下:
import React, { useState, useEffect, useCallback } from "react"
import axios from "axios"
const Home = () => {
const [data, setData] = useState(null)
const [query, setQuery] = useState("react hooks")
const getData = useCallback(async () => {
const response = await axios.get(
`http://hn.algolia.com/api/v1/search?query=${query}`
)
setData(response.data)
}, [query])
useEffect(() => {
getData()
}, [getData])
const handleChange = event => {
event.preventDefault()
setQuery(event.target.value)
}
return (
<div>
<input type='text' onChange={handleChange} value={query} />
<button type='button' onClick={getData}>
Submit
</button>
{data &&
data.hits.map(item => (
<div key={item.objectID}>
{item.url && (
<>
<a href={item.url}>{item.title}</a>
<div>{item.author}</div>
</>
)}
</div>
))}
</div>
)
}
export default Home
getData
,那么你不需要useEffect
,但如果你使用它,你可以有一个提交状态,并且只有在submitting
为true时才运行effect。 - azium