2016-03-03 75 views
2

我有大約5000個項目需要呈現爲表格。我正在使用redux來保存它們,並且這些項目具有持續時間屬性,因爲時間進度的持續時間屬性應該更新。如何處理由redux商店持有的數據不斷變化的屬性?

作爲第一次切割,我每隔5秒從服務器推出持續時間,並且這沒什麼大問題,因爲表格是分頁的,所以並非所有這些項目都呈現給DOM。我沒有性能問題,但是我引入了更多的功能,需要我停止這樣做,而且即使核心數據沒有改變,這也是一種浪費,因爲持續時間已經改變,我仍然在推動它。

只有在添加新項目或刪除項目時,我應該將項目推送到客戶端。但不知何故,我需要更新客戶端的持續時間。我可以想辦法做到這一點,就像有一個計時器服務在後臺運行,並向Redux商店發送一個動作以更新所有項目的持續時間。但不知道這是否是一個好方法,誰能請指教?

+0

您能描述一下如何計算持續時間?它只是一些領域的差異,像'created_at'和當前時間?如果是這樣,你不需要更新你的狀態,因爲你可以用'render()'來計算它。 –

+0

@AlexandrSubbotin我還沒有計算客戶端持續時間的代碼,但是計劃是要導出數據。但是,如果我只是在'render()'中做了那個,那麼每10秒會觸發一次'render()'來更新持續時間?我仍然不得不派遣一些行動,以減少商店再次開始渲染是不是? – opensourcegeek

回答

0

是的,後臺服務定期調度一個行爲是明顯的方式。如有必要,您可以通過監聽Redux狀態的變化來啓用/禁用服務。

0

正如我在comment中所述,您可以計算組件的render()方法中的持續時間。即您當前的代碼是:

render() { 
     return this.props.items.map(item => <Duration duration={item.duration}>) 
    } 

而且您計算的時間長度類似於new Date().getTime() - item.created_at。因此,您可以計算render()和forceUpdate組件每10秒的持續時間:

componentDidMount() { 
    setInterval(this.forceUpdate.bind(this), 10000); //re-render component every 10 seconds 
    } 
    render() { 
    const now = new Date().getTime(); 
    return this.props.items.map(item => <Duration duration={now - item.created_at}>) 
    }