【发布时间】:2021-02-15 09:47:27
【问题描述】:
我的网络收到了无限的请求,这是由于我的 useEffect。我知道问题是因为我在 useEffect 函数中将“posts”和“setPost”作为第二个参数放在括号中,但是每当我添加新帖子时我都需要渲染页面,所以“posts”必须在括号内。
function Home() {
const {userData, setUserData} = useContext(userContext)
const [posts, setPost] = useState([])
const [createPost, setCreatePost] = useState('')
const handleToken = () => {
localStorage.removeItem('auth-token')
}
const token = localStorage.getItem("auth-token");
const handleOnSubmit = (e) => {
e.preventDefault()
axios.post('http://localhost:5000/posts', {textOfThePost: createPost}, {
headers: { 'auth-token': token },
})
.then((res) => {setCreatePost("")})
axios.get('http://localhost:5000/posts')
.then(res => {
setPost(res.data)
})
}
useEffect(() => {
}, [posts])
【问题讨论】:
-
您想在添加新帖子时重新渲染?
-
这里不需要使用useEffect。你可以只更新状态。
-
@malong11 是的!就像推特一样
-
@RunSmeagolRun 你是什么意思?所有帖子都应该在页面加载后立即出现,这就是我使用 useEffect 的原因
-
@RunSmeagolRun 是对的,您在这里不需要 useState。只需在添加新帖子并更新状态后发出获取请求,因为状态已更新,它应该重新呈现自己
标签: reactjs infinite-loop use-effect use-state use-context