我正在建立一個應用程序,我從股票市場API基於代價獲取數據。我在服務器上使用了redux,並在客戶端上使用了+ redux,並使用sockets.io在兩者之間進行通信。多個動作派發破壞API獲取請求在REDX應用程序
我設置應用程序的方式是,最初狀態只是填充了代碼列表。沒有數據從API獲取有關每個股票的數據。在客戶端,每當有發射狀態的事件(這是發出的每一個新的用戶連接到插座時),在客戶端下面的代碼調度動作
socket.on('state', state => {
store.dispatch({
type: 'SET_TICKERS',
state
});
});
現在,實際取從服務器端的數據,我從一個組件的生命週期內鉤在客戶端
class StockList extends Component {
constructor(props){
super(props);
this.renderButton = this.renderButton.bind(this);
}
renderButton(stock){
return(
<button key={stock} type='button' className='btn btn-primary stock-btn'>
{stock}
<span className='glyphicon glyphicon-remove' aria-hidden='true'
onClick={() => this.props.onClick(stock)}></span>
</button>
)
}
render() {
if(this.props.stocks){
return (
<div>
{this.props.stocks.map(stock => {
return this.renderButton(stock);
})}
</div>
)
}else{
return(
<div>Loading...</div>
)
}
}
componentDidUpdate() {
console.log('The component did update');
console.log(this.props.stocks.toJS());
this.props.fillState(this.props.currentState);
}
}
調度的動作讓我從componentDidUpdate函數中調用。此狀態在設置好代理商名單後立即更新。但是,問題在於componentDidUpdate生命週期鉤子發出太多的操作請求,導致api崩潰。這是爲什麼發生?我是否通過從componentDidUpdate內部發送派發來創建無限循環?節流會解決這個問題嗎?
但該組件沒有收到新的道具無限多,不是嗎?因此,儘管有無數的動作派發,但組件不會在每次派發時重新呈現,因爲狀態不會隨着每次派發而改變。它只是在第一個動作調度上發生變化,對吧? –