使用LRU和redux存储策略

时间:2017-03-04 21:08:20

标签: redux react-redux lru

我想为react-redux应用程序实现LRU,但是我不确定通过reducer将数据读取和写入存储的最佳策略是什么,以便我可以维护LRU结构。

目标是为最新的用户列表实施LRU。实际上,只要应用程序单击特定联系人,就会将其添加到最新的用户列表中。让我们说这个列表最多可以有10个用户,所以当它达到最大值时会有效地弹出列表中最老的访问用户。

我可以为列表中的每个用户关联一个时间戳,但这意味着每次我从商店中读取状态时,我都必须排序并找到我感觉很慢的最旧时间戳。

我是React / Redux的新手,所以请耐心等待。

任何建议都赞赏!

谢谢, 德里克

1 个答案:

答案 0 :(得分:2)

我只需要一个独立的减速器,可以选择"选择联系人"动作(可能还有另一个减速器也将用于设置当前选定的用户)。它将保持阵列并且只是向前推,如果最大值是反射器,则弹出结束。

类似的东西:

const initialState = []

export const lruReducer = (state = initialState, action) => {
    switch(action.type) {
        case 'SELECT_CONTACT':
            // copy the previous array (I'm assuming ES6 syntax here, but you could use Object.assign or ImmutableJS or something if preferred)
            // this is important to keep the state immutable
            let newState = [...state]

            // add the new contact (this is where you would do any de-duping logic
            newState.unshift(action.user) 

            // keep removing items until constraint is met
            while (newState.length > 10) {
                newState.pop()
            }

            // return new array
            return newState
        default:
            return state
    }
}

然后将其与您正常的其他减速器结合使用。