Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';对于需要大量任意数据映射的react redux应用程序来说,它是一个很好的体系结构?_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 什么';对于需要大量任意数据映射的react redux应用程序来说,它是一个很好的体系结构?

Javascript 什么';对于需要大量任意数据映射的react redux应用程序来说,它是一个很好的体系结构?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,假设您正在制作一个显示电影数据的应用程序,您从服务器以以下格式获取: { movies: [], actors: [], directors: [], years: [] } 不同的阵列通过ID相互关联。换句话说,电影中的对象如下所示: {title: 'The Shining', cast: [`837392010`, `363893920` ...], ...} cast数组中的每个id都是对actors数组中的actor的引用 您可以按原样将数据放在redux存储中,但不同的组件需要以

假设您正在制作一个显示电影数据的应用程序,您从服务器以以下格式获取:

{ movies: [], actors: [], directors: [], years: [] }
不同的阵列通过ID相互关联。换句话说,电影中的对象如下所示:

{title: 'The Shining', cast: [`837392010`, `363893920` ...], ...}
cast数组中的每个id都是对actors数组中的actor的引用

您可以按原样将数据放在redux存储中,但不同的组件需要以不同的任意方式使用它。例如,一个组件需要列出20世纪70年代杰克·尼科尔森(Jack Nicholson)出演的所有电影,尽管年份数组与演员没有直接关联。它只是链接到电影,电影本身也链接到演员。因此,在组件可以渲染之前,它需要运行一系列数据转换

另一部分列出了马丁·斯科塞斯(Martin Scorsese)和罗伯特·迪内罗(Robert DiNero)合作的所有时间,另一部分列出了片名中带有“火”的所有电影,另一部分列出了汤姆·汉克斯(Tom Hanks)在1990年至2000年间的所有电影

产品经理计划随时添加和删除这样的任意显示,因此,应用程序中会使用日期,就像可查询的数据库一样。具体的查询将经常更改

我们还可以说,转换必须在客户机上完成。服务器的唯一功能是以上述标准化形式发送数据

构建这样一个应用程序的最佳方式是什么,这样它就可以扩展并易于更新?我可以想出几种方法:

  • 在减缩器中进行所有映射。缺点是它们的减速器会膨胀。他们需要以大量不同的形式缓存相同的数据

  • 将原始的、规范化的数据存储在还原器中,并使用控制器组件(高级组件)将其映射到其子级需要的任何形式。我对此不感兴趣,因为它将业务逻辑与视图混为一谈。当然,这假设您将高级组件视为视图

  • 在connect、MapStateTops函数中映射。每个高级组件都会连接到商店,但在它获得道具之前,它们会通过连接转换为适当的格式


  • 明确建议查看Async Redux示例()。具体地看一个reducer(),在这里我们可以传递任何实体,它只是被任意放置在状态上。您的组件状态太通用了。因此,您必须进行大量昂贵的计算才能获得所需的数据,而后端的数据库可以非常高效地为您提供这些数据。因此,我会更仔细地观察你的应用程序需要显示什么样的关系,然后使你的状态树更接近这些关系。我认为主要的问题是,随着你的应用程序的增长,越来越多的视图依赖于层次状态的某些部分,当这些值发生变化时,你的应用程序将不得不重新计算。当这些计算代价高昂时,性能自然会受到影响。