import React,{ Component } from 'react';
import { connect } from 'react-redux';
import { itemid } from '../actions/action';
class DetailPage extends Component{
componentWillUpdate(){
this.props.dispatch(itemid([this.props.params.item,`${this.props.params.item}${this.props.params.id}`]))
}
render(){
const { dispatch } = this.props;
return(
<div>
{this.props.params.id}
</div>
)
}
}
function selectstate(state){
return{
state
}
}
export default connect(selectstate)(DetailPage)
// {this.props.params.item} 来自react-router(路径('/ detail / item / id'))
为什么我的调度是无限循环直到 错误(超出最大调用堆栈大小)
答案 0 :(得分:3)
你正在componentWillUpdate
开火。因此,每次更新状态时,您都会再次更新状态。你应该永远修改componentWillUpdate中的状态:https://facebook.github.io/react/docs/component-specs.html#updating-componentwillupdate
顺便说一句,在componentWillReceiveProps
中执行此操作可能会做同样的事情,因为您的来自redux商店的状态将以props
的形式出现。
问题是为什么你在更新后进行调度?是因为下面的功能设置状态?
如果您希望在设置特定状态后发送,则可以使用shouldComponentUpdate
阻止除该状态以外的更新。但这感觉就像这种配置的副作用。我认为你在设置状态的同时调度你的事件要好得多,或者作为对它的回调。