在 next.js 后触发客户端重新加载
Trigger client-side reload in next.js
场景
索引页使用"getInitialProps"加载数据。然后我们创建一个可以创建新数据的对话框。创建新数据后,应重新加载当前页面。
问题
我们使用 Router.replace('/')
重新加载页面。但是会触发服务端渲染。
问题
我们需要的是客户端重新加载。 "getInitialProps" 函数应该在浏览器中调用。那么,如何进行客户端重载呢?
运行以下代码
pages/index.js
import Router from 'next/router';
function Index({ isServer }) {
console.log('render', new Date());
return (
<div>
<h1>Home page. Is it on server? - {isServer ? 'Yes' : 'No'}</h1>
<button type="button" onClick={() => Router.push('/')}>
Reload me
</button>
</div>
);
}
Index.getInitialProps = async ({ req }) => {
return { isServer: !!req };
};
export default Index;
我可以看到即使在单击 "Reload me" 之后它 console.log
也只在服务器上呈现一次。我也可以看到 isServer
在 "reload" 之后也等于 false。
您如何准确地重新加载页面,以便您看到它是在服务器端呈现的?
PS
截图如下:
假设,用户在
http://www.example.com/profile
用户已编辑个人资料,由于某种原因,您需要重新加载同一页面。
如果您的情况与此类似,您可以使用Router.reload();
记住,你必须像这样导入路由器对象import Router from "next/router";
更多信息:https://nextjs.org/docs/api-reference/next/router#routerreload
没有看到我真正想要的答案,
这对我有用:
import Router from 'next/router'
Router.reload(window.location.pathname);
更好的选择是使用 router.replace(router.asPath)
替换不会创建新的历史记录项,因此“后退”按钮按预期工作
本文中解释的详细信息
https://www.joshwcomeau.com/nextjs/refreshing-server-side-props/
场景
索引页使用"getInitialProps"加载数据。然后我们创建一个可以创建新数据的对话框。创建新数据后,应重新加载当前页面。
问题
我们使用 Router.replace('/')
重新加载页面。但是会触发服务端渲染。
问题
我们需要的是客户端重新加载。 "getInitialProps" 函数应该在浏览器中调用。那么,如何进行客户端重载呢?
运行以下代码
pages/index.js
import Router from 'next/router';
function Index({ isServer }) {
console.log('render', new Date());
return (
<div>
<h1>Home page. Is it on server? - {isServer ? 'Yes' : 'No'}</h1>
<button type="button" onClick={() => Router.push('/')}>
Reload me
</button>
</div>
);
}
Index.getInitialProps = async ({ req }) => {
return { isServer: !!req };
};
export default Index;
我可以看到即使在单击 "Reload me" 之后它 console.log
也只在服务器上呈现一次。我也可以看到 isServer
在 "reload" 之后也等于 false。
您如何准确地重新加载页面,以便您看到它是在服务器端呈现的?
PS
截图如下:
假设,用户在
http://www.example.com/profile
用户已编辑个人资料,由于某种原因,您需要重新加载同一页面。
如果您的情况与此类似,您可以使用Router.reload();
记住,你必须像这样导入路由器对象import Router from "next/router";
更多信息:https://nextjs.org/docs/api-reference/next/router#routerreload
没有看到我真正想要的答案,
这对我有用:
import Router from 'next/router'
Router.reload(window.location.pathname);
更好的选择是使用 router.replace(router.asPath)
替换不会创建新的历史记录项,因此“后退”按钮按预期工作
本文中解释的详细信息 https://www.joshwcomeau.com/nextjs/refreshing-server-side-props/