【问题标题】:Storing Data from Redux Store in Another Data Structure将 Redux Store 中的数据存储在另一个数据结构中
【发布时间】:2016-02-19 03:13:32
【问题描述】:

我的应用在加载时将数据从 Firebase 加载到 Redux 存储中。它作为包含数百个嵌套对象的对象加载。

为了呈现该数据的表格组件(特别是this one),我必须将其转换为对象数组。

我目前的解决方案是像这样在表格组件mapStateToProps() 中简单地转换它(使用lodash 库):

function mapStateToProps(state) {

    return {
        listingsData: _.values(state.config)
    }
}

这似乎有效,并且我在 Firebase 仪表板中所做的更改几乎立即成功地呈现在我的应用中。

我的问题是:这种做事方式是否会导致我的应用程序(数组 + 存储)的内存消耗增加 2 倍?

这不是几百行的问题,但我希望某些用户拥有几千行数据。

如果是 2x 内存,有没有更有效的方法?

ETA:我认为这个答案将来可能仍然有用,但回想起来我应该只写一个小测试。此测试支持以下接受的答案:

var x = {a:{var:1}, b:{var:2}, c:{var:3}};
var y = _.values(x);

console.log(x, y); //values match

x.a.var = 99;

console.log(x, y); //values still match

【问题讨论】:

    标签: javascript reactjs firebase lodash redux


    【解决方案1】:

    据我所知,来自 loadash 的 _.values 函数(不适用于 loadash),在您的情况下,您并没有将内存加倍(克隆对象),而是创建对您存储的那些对象的引用数组没事。

    您可能需要考虑的是在引用之前过滤这些对象,而不是始终创建对每个对象的引用。

    【讨论】:

    • 谢谢 - 你能扩展你的过滤点吗?是否引用每个 obj 次优,性能方面?我最终将使用用户定义的参数包含一个过滤器,我本来打算把它放在 mapStateToProps 中——这就是你的意思吗?
    • 如果你有过滤数据的参数(状态可能或静态),你可以在将状态传递给组件之前过滤状态。这是比一般性能更多的建筑问题,但在你的情况下,问题是你需要引用每个对象还是只需要一些对象?你会使用每一个对象吗?如果没有,您可以创建仅包含您需要的对象列表。
    • 这是有道理的。数据基本上是用户记录的列表,因此当前预期的用户体验是用户在加载时以表格形式查看所有记录,然后可以根据需要应用过滤器。如果我理解正确,如果我稍后确定用户只对首次加载时记录的某些子集感兴趣,我认为您在传递给组件之前进行过滤的方法听起来是最佳的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多