如何通过密钥获取redux商店中的商品?

时间:2016-11-24 07:07:09

标签: reactjs react-redux

假设我定义了一个reducer,它返回一个对象数组,其中包含id或者其他键。什么是在数组中获取/查找具有特定id的特定对象的redux方法。数组本身可以包含几个数组:

{ items:[id:1,...],cases:{...}}

通过id查找记录/节点的redux方法是什么?

3 个答案:

答案 0 :(得分:0)

使用redux没有特殊的方法。这是一个简单的JS任务。我想你也会使用反应:

function mapStoreToProps(store) {
    function findMyInterestingThingy(result, key) {
         // assign anything you want to result
         return result;
    }

    return {
        myInterestingThingy: Object.keys(store).reduce(findMyInterestingThingy, {}) 
        // you dont really need to use reduce. you can have any logic you want
    };
}

export default connect(mapStoreToProps)(MyComponent)

问候

答案 1 :(得分:0)

我使用像 lodash 这样的库:

var fred = _.find(users, function(user) { return user.id === 1001; });

fiddle

值得注意的是,优先选择对象优于数组'在商店里(特别是对于大型的州树);在这种情况下,您将项目存储在一个对象中(例如)id作为键:

{
  '1000': { name: 'apple', price: 10 },
  '1001': { name: 'banana', price: 40 },
  '1002': { name: 'pear', price: 50 },
}

这使选择更容易,但是你必须在加载时排列状态的形状。

答案 2 :(得分:0)

存储此类数据的完美redux方法是将它们byIdallIds存储在reducer中的对象中。
在你的情况下,它将是:

{
  items: {
    byId  : {
      item1: {
        id     : 'item1',
        details: {}
      },
      item2: {
        id     : 'item2',
        details: {}
      }
    },
    allIds: [ 'item1', 'item2' ],
  },

  cases: {
    byId  : {
      case1: {
        id     : 'case1',
        details: {}
      },
      case2: {
        id     : 'case2',
        details: {}
      }
    },
    allIds: [ 'case1', 'case2' ],
  },
}

参考:http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

这有助于保持状态的标准化,既可以维护也可以使用数据。
这种方式可以更容易地遍历所有数组并进行渲染,或者如果我们需要通过它的id获取任何对象,那么它将是O(1)操作,而不是每次都在完整数组中进行迭代。 / p>