Next.js:router.replace和router.refresh之间的区别



对于一些cookie问题,我需要在重定向到主页后刷新next.js页面来执行getServerSideProps。我尝试使用"next/router"中的router,但只有router.reload((似乎再次完全调用了getServerSideProps,另一方面,router.replace没有。

export default function Home(props) {
const router = useRouter()
const refreshServerSide = () => {
router.replace(router.asPath) // <--- it doen'st call getServerSideProps again
// router.reload();  // <--- it works!
}

//...
export async function getServerSideProps(ctx) {
const keycloak: any = Keycloak(ctx.req); 

let user = {} as user;
const instance = axios.create({
baseURL: 'http://localhost:8081',
headers: { 'Authorization': 'Bearer ' + keycloak.token }
});
await instance.get('/auth/realms/demo/protocol/openid-connect/userinfo')
.then(response => {
user = response.data;
}).catch(err => {
// console.log(err)
})
return { props: 
{ urqlState: ssrCache.extractData() ,
user: user}
};
}

我在谷歌上搜索了如何刷新或重新加载getServerSideProps,他们建议router.replace。有什么区别我不知道吗?

您的服务器代码将再次运行,但问题是useEffect

试着从ssr中传递一些道具,并在道具改变时运行useEffect

useEffect(()=>{
setValues(newValues)
},[page])

最新更新