简介
redux-schema-sanitizing-reducer 是一个用于数据验证和清洗的 Redux reducer 的 npm 包。这个包可以帮助开发者创建一个 reducer,自动地验证和清洗数据,然后将它们放到 Redux 中。
这个包的原理是通过配置一个 JSON Schema 来表示数据结构的规范。当数据通过 Redux Action 传递到 reducer 时,该 reducer 将使用 JSON Schema 来验证数据,并清洗它们直到符合要求。最后,清洗过的数据将放入 Redux store 中。
使用这个包可以帮助开发者更好地管理数据,并减少应用程序的 bug 数量。同时,使用 JSON Schema 也使应用程序的数据结构更为清晰简单。
安装
安装 redux-schema-sanitizing-reducer 非常容易。
npm i redux-schema-sanitizing-reducer
使用方法
首先,需要引入 redux-schema-sanitizing-reducer。
import { createSanitizingReducer } from "redux-schema-sanitizing-reducer";
然后,需要使用 createSanitizingReducer 创建一个新的 reducer。这个 reducer 接收 2 个参数:JSON Schema 和原始 reducer。
-- -------------------- ---- ------- ----- ------ - - ----- --------- ----------- - ----- - ----- --------- --------- ----- -- ---- - ----- --------- ---- -- -- -- -- ----- --------------- - ------- ------- -- - -- -- ------ ----- ----- -- ----- ----------------- - ------------------------------- -----------------
在这个示例中,JSON Schema 检查了传递给 reducer 的数据是否为一个对象,同时 name 是必需的,而 age 必须为一个大于或等于 0 的数字。
如果 reducer 接受到了一个包含不符合规范的 name 或 age 的对象,redux-schema-sanitizing-reducer 将首先删除无用的属性,然后将必需的属性设置为 null 或空字符串(如果支持的话)。如果必需的属性在第一次过滤后仍然不符合规范,则会抛出一个错误。
最后,使用 sanitizingReducer 替代原始 reducer。
现在,sanitizingReducer 将在处理每个 action 前进行数据验证和清洗。如果数据不符合规范,sanitizingReducer 不会将其写入 Redux store 中。
示例代码
-- -------------------- ---- ------- ------ - ----------------------- - ---- ---------------------------------- ----- ------ - - ----- --------- ----------- - ----- - ----- --------- --------- ----- -- ---- - ----- --------- ---- -- -- -- -- ----- --------------- - ------- ------- -- - -- -- ------ ----- ----- -- ----- ----------------- - ------------------------------- ----------------- ------ ------- ------------------
结论
在这篇文章中,我们介绍了 redux-schema-sanitizing-reducer 这个 npm 包,并提供了一个简单的使用示例。通过使用这个包,你可以更好地管理你应用程序的数据,减少错误和 bug 的数量,并使用 JSON Schema 更好地清晰和简化数据结构。
使用 JSON Schema 进行数据验证和清洗是一个十分强大和灵活的工具,尤其是在使用 Redux 管理状态时。这使得进程更为安全,能够更好地处理数据。我们鼓励开发者在他们的应用程序中使用它。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067007e361a36e0bce8ac2