对于一些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])