2016-03-03 71 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}>) 
    }