2017-03-04 1 views
0

Je voulais implémenter un LRU pour une application rea-redux, mais je ne suis pas sûr de la meilleure stratégie de lecture et d'écriture des données dans le magasin via un réducteur afin de pouvoir maintenir le Structure LRU.Travailler avec une stratégie de magasin LRU et Redux

L'objectif est de mettre en œuvre un LRU pour une liste d'utilisateurs plus récente. En effet, chaque fois que l'application clique sur un contact spécifique, ils sont ajoutés à la liste d'utilisateurs la plus récente. Supposons que la liste ne dépasse pas 10 utilisateurs, alors si elle atteint le maximum, j'ouvrirai le plus ancien utilisateur de la liste.

Je pourrais associer un horodatage pour chaque utilisateur de la liste, mais cela signifie que chaque fois que je lis l'état du magasin, je devrais trier et trouver l'horodatage le plus ancien que je trouve lent.

Je suis nouveau à React/Redux, alors s'il vous plaît ours avec moi.

Toutes les suggestions appréciées!

Merci, Derek

Répondre

1

Je voudrais juste un réducteur séparé qui agit sur l'action «sélectionnez le contact » (il y a probablement un autre réducteur qui agira également à définir l'utilisateur sélectionné). Il va maintenir le tableau et pousser juste vers l'avant, et si le maximum est des reachers, sautez la fin.

Quelque chose comme:

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 
    } 
} 

Ensuite, il suffit de combiner avec vos autres réducteurs comme normale.

+0

Merci, ouais c'est ce que j'ai fini par faire – darewreck