javascript - redux的state范式化的一个疑问?

查看:69
本文介绍了javascript - redux的state范式化的一个疑问?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

redux的state范式化的文档:http://cn.redux.js.org/docs/r...

其中有这么一段话。

需要注意的是,范式化的 state 意味更多的组件被 connect,每个组件负责查找自己的数据,这和小部分的组件被 connect,然后查找大部分的数据再进行向下传递数据是恰恰相反的。事实证明,connect 父组件只需要将数据项的 Id 传递给 connect 的子对象是在 Redux 应用中优化 UI 性能的良好模式,因此保持范式化的 state 在提高性能方面起着关键作用。

我的理解。这句话的意思是,在范式化的state中,就不区分container组件和傻子组件了吗?让尽可能多的组件成为智能组件吗?

大家有没有使用normalize范式化state,实践是怎么样的?

解决方案

state范式化的目的是在复杂的state结构,也就是在应用领域中数据的结构变得复杂时,先进行优化或使用正规化(normalize)的方式,达成数据处理上的便利。这些数据的格式通常为JSON格式,会有复杂的巢状构造,在数据上的处理会造成困难,范式化一词应该是来自于数据库,而normalizr库一开始也是由Redux创作者所写的,为的是在这种数据结构时处理上进行处理时的方便。整体来说,这会与reducer在撰写时较有关系,因为它是属于数据的处理部份。

至于容器组件与呈现组件的分别,是Redux在与React组件互相串接使用时,作的一种组件应用上的差异,这与state要如何使用并没有太大关系。对于Redux来说,它不知道呈现组件的存在,因为并没有用到绑定(connect)。


接著解释这一段话的部份,大部份都是要引用数据表的概念。

如果你已经有了一些数据库的概念,应该知道在数据库中范式化(正规化)的目的,就是把一张大的复杂的数据表,利用一些规则,去除掉有重覆情况的栏,然后拆分为不同的数据表。这个章节的大部份的说明就是在讲这个。

一个大数据表拆分后,好处是每张数据表中所记录的数据,会较为独立具有单一性,如果你只需要某个数据时,直接找对应的数据表就容易得多而且性能会更好。但也不能说完全没有缺点,缺点就是你需要考量到不同数据表之间的关连性,如果现在是要查一篇博客的作者,这就要查找两张表,一个是博客,另一是作者。上面是一个复杂的点,另一个复杂的点在于,组件中套用到的数据也不一定是对应到数据表,组件中要呈现或使用的数据,到底是来自于多张数据表,还是一张数据表?这就是另一个需要伤脑筋的部份了。

范式化的 state 意味更多的组件被 connect,每个组件负责查找自己的数据...

这一段话会这样说明,这是因为数据表被拆分后,会造成的一些麻烦情况。当然这需要与真实应用时的组件是要如何对应到数据有关。

事实证明,connect 父组件只需要将数据项的 Id 传递给 connect 的子对象是在 Redux 应用中优化 UI 性能的良好模式,因此保持范式化的 state 在提高性能方面起着关键作用

这一段是说明,经过范式化的state在性能上会比较好。


至于实践上,state数据处理我认为会与reducer较有关连。一般都是先规划state的对象结构,再决定要如何来处理。React组件的部份就要视功能来决定,并没有说容器组件或呈现组件的多少分别,不过对于Redux的文档内容指引方向来说,的确是容器组件愈少愈好,而呈现组件愈多愈大,这只是一个建议的方向,还是要看作什么来决定。一开始我们都是先能完成所要的功能,再进一步地优化每个部份。

以上,一些想法供参考,希望有帮助。

这篇关于javascript - redux的state范式化的一个疑问?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆