首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过键在redux商店中获取项目?

如何通过键在redux商店中获取项目?
EN

Stack Overflow用户
提问于 2016-11-24 15:07:09
回答 3查看 2.5K关注 0票数 1

假设我定义了一个reducer,它返回一个对象数组,其中包含诸如id之类的键。获取数组中具有特定id的特定对象的/finding的方法是什么?数组本身可以包含多个数组:

代码语言:javascript
运行
复制
{ items:[id:1,...],cases:{...}}

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

EN

回答 3

Stack Overflow用户

发布于 2016-11-24 15:47:06

我会使用像lodash这样的库

代码语言:javascript
运行
复制
var fred = _.find(users, function(user) { return user.id === 1001; });

fiddle

值得注意的是,在存储中“首选对象而不是数组”(特别是对于大型状态树)是一种良好的实践;在这种情况下,您可以将项存储在一个对象中,并以(比方说) id作为键:

代码语言:javascript
运行
复制
{
  '1000': { name: 'apple', price: 10 },
  '1001': { name: 'banana', price: 40 },
  '1002': { name: 'pear', price: 50 },
}

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

票数 0
EN

Stack Overflow用户

发布于 2016-11-24 22:47:42

存储此类数据的完美redux方法是将它们存储在reducer中的一个对象中,即byIdallIds

在您的情况下,它将是:

代码语言:javascript
运行
复制
{
  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)操作,而不是每次都在完整的数组中迭代。

票数 0
EN

Stack Overflow用户

发布于 2016-11-24 15:13:23

使用redux没有特殊的方法可以做到这一点。这是一个简单的JS任务。我想你也可以使用react:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40779948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档