前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛逼!一个仅为2kb的React数据流状态库

牛逼!一个仅为2kb的React数据流状态库

作者头像
程序员老鱼
发布2023-08-10 10:01:12
2320
发布2023-08-10 10:01:12
举报
文章被收录于专栏:前端实验室

大家好,我是「前端实验室」爱分享的了不起~

今天为大家分享一个全新的数据流方案,在一行代码都不用修改的情况下,达到提升react局部状态为全局共享状态的效果。

helux

helux 是一个鼓励服务注入,并支持响应式变更 react 的全新数据流方案,为了更符合现在流行的 DDD 围绕业务构建领域模型而生。

特点

  • 轻量级应用,压缩后大小仅为 2kb
  • 简单易上手,仅有 6 个 api
  • 高性能,自带依赖收集
  • 响应式,支持创建响应式对象,在视图之外变更对象将同步更新视图
  • 服务注入,配合useService接口轻松控制复杂业务逻辑,返回稳定的方法引用
  • 状态提升 0 改动,所以地方仅需将useObject换为useSharedObject即可提升状态共享到其他组件
  • 避免 forwordRef 地狱,内置的exposeService模式将轻松解决父调子时的ref转发晦涩理解问题和传染性(隔代组件需要层层转发)
  • ts 友好,100% ts 编写,为你提供全方位类型提示

使用

首先使用npm命令进行安装

代码语言:javascript
复制
npm i helux

然后调用createShared创建共享状态,调用useShared使用共享状态

代码语言:javascript
复制
import React from 'react';
+ import { createShared, useShared } from 'helux';
+ const { state: sharedObj } = createShared({a:100, b:2});

function HelloHelux(props: any) {
+  const [state, setState] = useShared(sharedObj);
   return <div>{state.a}</div>; // 当前组件仅依赖a变更才触发重渲染
}

API使用

useObject

使用useObject时方便定义多个状态值时,可以少写 useState

代码语言:javascript
复制
// 基于对象初始化一个视图状态
const [state, setState] = useObject({a:1});
// 基于函数初始化一个视图状态
const [state, setState] = useObject(()=>({a:1}));
useForceUpdate

useForceUpdate 用来强制更新当前组件视图,某些特殊的场景可以使用它来做视图重刷新

代码语言:javascript
复制
const forUpdate = useForceUpdate();
createSharedObject

createSharedObject 创建一个共享对象,可透传给 useSharedObject

代码语言:javascript
复制
// 初始化一个共享对象
const sharedObj = createSharedObject({a:1, b:2});
// 基于函数初始化一个共享对象
const sharedObj = createSharedObject(()=>({a:1, b:2}));

createReactiveSharedObject

createReactiveSharedObject 创建一个响应式的共享对象,可透传给 useSharedObject

代码语言:javascript
复制
// 初始化一个共享对象
const [reactiveObj, setState] = createReactiveSharedObject({a:1, b:2});

sharedObj.a = 111; // 任意地方修改 a 属性,触发视图渲染
setSharedObj({a: 111}); // 使用此方法修改 a 属性,同样也能触发视图渲染,深层次的数据修改可使用此方法

极致的简单是 helux 最大的优势,了解这几个api 后,就可以轻松应付任何复杂场景,更多详细内容,可以查看官方文档

https://github.com/tnfe/hel/tree/main/packages/helux

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • helux
    • 特点
      • 使用
        • API使用
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档