【发布时间】:2020-11-18 11:56:07
【问题描述】:
我目前正在 Component1 中获取数据,然后调度一个操作以使用响应更新存储。数据可以在this.props的Component2中看到,但是返回响应时如何渲染呢?当数据返回时,我需要一种方法来重新加载组件。
最初我在componentDidMount 中运行了一系列函数,但这些函数都是在数据从 Component1 返回到 Redux 存储之前执行的。组件之间是否存在某种async/await 样式?
class Component1 extends React.Component {
componentDidMount() {
this.retrieveData()
}
retrieveData = async () => {
let res = await axios.get('url')
updateParam(res.data) // Redux action creator
}
}
class Component2 extends React.Component {
componentDidMount() {
this.sortData()
}
sortData = props => {
const { param } = this.props
let result = param.sort((a,b) => a - b)
}
}
mapStateToProps = state => {
return { param: state.param }
}
connect(mapStateToProps)(Component2)
在 Component2 中,this.props 最初是未定义的,因为尚未返回数据。当它被返回时,尽管this.props 被填充了数据,组件也不会重新渲染。
【问题讨论】:
-
组件在 state 或 props 更新时重新渲染。如果 Component2 接收到一个新的 prop 对象,那么它应该重新渲染。如果你做了一些有点傻的事情,比如将 props 存储到本地组件状态,那么你需要使用
componentDidUpdate或具有适当依赖关系的useEffect来更新本地状态。请使用Minimal, Complete, and Reproducible 代码示例更新您的问题以获得更多帮助或更好的帮助。 -
我已经用一些代码更新了这个问题。
-
"...但是视图总是落后一个渲染。"你在用 sortData 函数中的
result做什么? -
appointmentDates应该是一个本地组件状态对象,然后当您在生命周期函数中更新它时,react 将正确重新呈现,您无需强制执行任何操作。 OR 因为您除了计算要渲染的格式化数据之外什么都不做,Appointments应该只在渲染函数中调用setAppointmentDates和sortAppointmentsByDate。跨度>
标签: reactjs redux redux-thunk