【发布时间】:2020-01-28 00:41:24
【问题描述】:
场景是这样的:
- 在一页 (
AssessmentListPage) 中,我显示了现有评估的列表;在第二页 (AssessmentDetailPage) 中,我将显示所选评估的详细信息; - 我正在使用 redux,两个页面都使用相同的 slice 操作系统状态 (
assessments) - 当我从
AssessmentListPage移动到AssessmentDetailPage时,一切正常;当我点击后退按钮时,它崩溃了。 -
崩溃的原因:Next.js 保持
AssessmentDetailPage页面处于活动状态,直到static getInitialProps方法完成。被调用的操作会更改状态并导致当前页面在没有预期数据的情况下重新呈现。然后正确渲染AssessmentListPage。
处理这个问题的最优雅的方法是什么?我应该分开减速器吗?
目前我只是更具防御性,并添加了我通常不需要的检查来避免这种特定的崩溃。
我还考虑过不在getInitialProps 中加载数据,而是在componentDidMount() 中加载数据,但我不喜欢复制代码来处理服务器端和客户端渲染的想法。
非常感谢任何建议。谢谢!
class AssessmentListPage extends React.Component {
static async getInitialProps({ store, req }) {
await store.dispatch(loadProfile(api)(req))
await store.dispatch(loadAssessments(api)(req))
}
}
class AssessmentDetailPage extends React.Component {
static async getInitialProps({ store, req }) {
await store.dispatch(loadProfile(api)(req))
await store.dispatch(loadAssessment(api)(req, query.id))
}
}
【问题讨论】:
-
你能发布记录的错误吗?
-
我认为这个错误并不重要。基本上,列表页面需要一个浅对象,而详细信息页面需要“完整对象”。发生错误是因为当页面加载浅版本以移动到列表页面时,详细页面仍然处于活动状态并重新呈现导致页面崩溃,因为它试图访问不存在的数据。
-
你能在codesandbox中进行复制吗?返回一个包含 setTimeout 的 Promise 来模拟延迟
标签: reactjs react-redux next.js