我在StackOverflow上看到了很多类似的问题,但建议的解决方案对我不起作用。我也不知道如何最好地应用它,因为我是React的新手。我的代码的MCVE如下:
export default class ClDashboard extends Component {
constructor(props) {
super(props)
this.state = {
start: this.props.location.query.start,
end: this.props.location.query.end,
period: this.props.location.query.period,
autoRotate: false
}
}
componentWillMount() {
this.setState(this.newProps(this.props))
}
componentDidMount() {
if (this.state.autoRotate) {
let nextID = this.getNextID(this.props.route.clientInfo.farms)
let [startDate, endDate] = this.getAutoRotateDates()
let timeQuery = '/?start=' + startDate + '&end=' + endDate
let farmChange = this.farmChange.bind(this)
let farmChangeHandle = () => {
if (this.state.autoRotate) {
farmChange(nextID, timeQuery)
}
}
setTimeout(farmChangeHandle, 3000)
}
}
farmChange = (ID, timeQuery) => {
browserHistory.push(this.state.url + ID + timeQuery)
}
基本上发生的是,如果某个标志getNextID()
设置为true,我试图在一组ID之间轮换(autoRotate
按顺序获取下一个ID)。但是,虽然URL更改为下一个ID,但页面不会反映更改。
我尝试了以下事项:
- 我不认为here的解决方案适用于我的案例,但如果是的话,我想知道如何解决。
- 我的react-router版本是3.0.5,所以像these for v4这样的解决方案不起作用
- 尝试添加componentWillReceiveProps()
,如建议的here,但这也无济于事。
有一件奇怪的事情是,如果我将if (this.state.autoRotateFarms)
中的所有内容复制到componentWillReceiveProps()
,那么它可以正常工作,但即使您离开后,它似乎也会将页面重定向回序列中的下一个ID。
我该如何解决这个问题?