简介
my-normalizr-immutable
是一个基于 normalizr
和 immutable
库的 npm 包,在前端开发中用于对数据进行归一化处理和不可变数据的操作。
在复杂的应用程序中,数据可能存在多个嵌套层级,但是前端组件仅处理其中的一部分数据,这时就需要用到数据归一化来避免数据重复,从而提高应用性能。同时,为了避免数据被误操作,使用不可变数据也是一个很好的选择。
安装
在项目中使用 npm
命令安装 my-normalizr-immutable
:
npm install my-normalizr-immutable
使用
以下是一些常见的使用场景:
数据归一化
normalizeData
函数接受两个参数,第一个参数为待归一化的数据数组,第二个参数为 schema
,表示规范化数据的规则。schema
规定了数据结构需要满足哪些条件,从而于 normalizeData
中进行过滤、排序、分组和归一化等操作,以生成符合规则的结构化数据。
import normalizeData from 'my-normalizr-immutable'; const data = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]; const userSchema = new schema.Entity('users'); const normalizedData = normalizeData(data, [userSchema]); console.log(normalizedData); // { entities: { users: { '1': { id: 1, name: 'A' }, '2': { id: 2, name: 'B' } } }, result: [1, 2] }
不可变数据
在使用 immutable
数据库之前,需要先引入 I
模块:
import { I } from 'my-normalizr-immutable';
在处理数据时,我们需要保证一旦数据被改变,就不能直接修改源数据。这时,我们就可以使用 I
模块中的 fromJS()
方法将原始数据转换成不可变数据,然后再进行修改操作。
import { I } from 'my-normalizr-immutable'; const data = { a: { b: { c: 1 } } }; const immutableData = I.fromJS(data); const newData = immutableData.setIn(['a', 'b', 'c'], 2); console.log(immutableData.getIn(['a', 'b', 'c'])); // 1 console.log(newData.getIn(['a', 'b', 'c'])); // 2
扩展 schema 规则
使用 my-normalizr-immutable
包来定义 normalize()
的 schema 规则时,我们还可以自定义规则。以下示例展示了如何定义一个支持用户关联评论的 schema 规则:
-- -------------------- ---- ------- ------ - ------ - ---- ------------ ------ - ----- --- - ---- ------------ ----- ------- - --- ------------------------- ----- ---- - --- --------------------- - --------- --- -------------- --- ------------- --------- --- --------------------- - ---------------- ------- ------- ---- -- - ------ ------------------------- ------ -- - ------ ------------------------- ------- --- -- --- --- ----- -------------- - ------------------- --------
在上面的示例中,我们定义了一个 comments
的属性,该属性将被转换成一个包含 index
属性的 Map
数据类型。
将数据恢复为纯值
使用 my-normalizr-immutable
的 toJS()
方法可以将不可变数据恢复为纯值。下面是一个使用示例:
import { I } from 'my-normalizr-immutable'; const immutableData = I.fromJS({ a: { b: { c: 1 } } }); const plainData = immutableData.toJS(); console.log(plainData); // { a: { b: { c: 1 } } }
结语
my-normalizr-immutable
包为前端工程师提供了一个灵活且高效的数据处理方案。在使用这个包时,请务必详细阅读文档,按照文档中的指引来编写代码。祝大家使用愉快。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005584381e8991b448d5798