然后在页面中的每一章使用Anchor组件包裹:
function Chapter({ chapter }) {
return (
...getInitialProps注水
可以在getInitialProps中提前计算目录数据,注入到页面中:
Home.getInitialProps = async () => {
const chapters...但是在Next.js的SSR环境下就会有问题:
点击目录链接时,页面不会滚动。
这是因为在服务端,我们无法获取组件的ref,所以锚点元素不存在,自然无法定位。
滚动页面时,目录高亮也失效。...服务端渲染的静态HTML中,并没有绑定滚动事件,所以无法自动高亮。
预取数据
首先,我们需要解决点击目录链接的问题。
既然服务端无法获取组件ref,那就需要在客户端去获取元素位置。...element.getBoundingClientRect();
window.scrollTo({
top: rect.top,
behavior: 'smooth'
})
}
无论哪种方法,都需要在组件挂载后获取元素的位置信息