【发布时间】:2017-12-20 22:49:25
【问题描述】:
首先请原谅措辞不佳的问题。
我有一个 SPA,其中有一个包含此路线的页面:
/students
这个页面的容器是StudentsView.js,在里面我这样做是为了获取学生列表:
componentDidMount () {
this.props.actions.loadStudents()
}
这是一个学生列表,点击一个会根据学生ID进入学生的详细信息页面:
/student/5
这个页面的组件是StudentDetailView.js
现在,为了避免在初始应用程序加载期间进行不必要的 API 调用以提高性能,我没有调度对 loadStudents() 操作的调用,该操作从 API 调用中设置学生状态部分,因为此页面不是我的应用程序。
现在的问题是当用户导航到学生详细信息页面时说:
/student/5
然后刷新页面,因为它们位于不同的组件上,并且不再调用 StudentsView.js 组件的 componentDidMount(),我最终在我的状态下得到一个空的学生数组,所以在我的学生详细信息组件学生将是未定义的:
function mapStateToProps (state, ownProps) {
const studentId = +ownProps.params.id
let student = { id: '', firstName: '', lastName: '' }
if (studentId && state.students.length > 0) {
student = getStudentById(state.students, studentId)
}
return {
student: student
}
}
除了确保在初始应用加载中调用 loadStudensts() 操作之外,还有其他解决方法吗?
最佳做法是什么,如果students 的列表为空,我是否将用户导航回列表页面?有没有办法,是否建议我在 StudentDetailView.js 组件中取消 loadStudents() 操作?
基本上,当用户在StudentDetailView.js 上时,我如何确保始终填充学生状态部分?
感谢您的帮助。
【问题讨论】:
标签: reactjs redux react-router react-redux