next.js: 使用来自路由器的参数时,useEffect 触发了两次
next.js: useEffect triggered twice when using param from router
我有这个代码
const router = useRouter();
const { pid } = router.query;
useEffect(() => {
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}, [pid]);
我可以从浏览器控制台看到对 api 的调用,其中 pid = undefined,紧接着又一次调用了实际的 pid 值。如何避免第一次来电?
又脏又快的解决方案,如果定义了pid
就控制
const router = useRouter();
const { pid } = router.query;
useEffect(() => {
if(pid) {
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}
}, [pid]);
试试这个:
useEffect(() => {
if(pid) { // will run if pid is valid
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}
}, [pid]);
我有这个代码
const router = useRouter();
const { pid } = router.query;
useEffect(() => {
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}, [pid]);
我可以从浏览器控制台看到对 api 的调用,其中 pid = undefined,紧接着又一次调用了实际的 pid 值。如何避免第一次来电?
又脏又快的解决方案,如果定义了pid
就控制
const router = useRouter();
const { pid } = router.query;
useEffect(() => {
if(pid) {
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}
}, [pid]);
试试这个:
useEffect(() => {
if(pid) { // will run if pid is valid
setLoading(true)
fetch('my/endpoint/' + pid)
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}
}, [pid]);