百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

React状态数据流管理框架,SPA(单页面)+SSR(服务器渲染)

ccwgpt 2024-09-14 00:28 33 浏览 0 评论

介绍

笔者在浏览Github的React专题时偶然发现了一个类似于dva.js的React状态和数据流管理框架——react-coat,其本身不对React进行任何的封装和改进,使用Class的方式组织Model,支持继承,但不强制使用,React生态圈开放、自由、繁荣,带来的问题就是复杂。结合作者的介绍,react-coat放弃了某些灵活性,约定替代配置,固化某些最佳实践,从而给予开发者最简洁的糖衣外套!



本文初衷

由于笔者目前处于一个技术的积累阶段,介绍一个框架或者一个技术并不是为了让大家真的去使用,而是从诸多技术中寻找灵感,不断地去学习才能找到自己的突破点,特别是在自身已经比较的熟练或者熟悉某一个方向,但是却又迷茫的时候,这时候多看看别人的东西或许能够成为自身突破的一个关键,网络上也是对各种技术框架褒贬不一,而作为一个学习者,那么本身 不必在乎技术的使用,更多的可能是其传达的思想,以便于达到举一反三的效果,特别是对技术感兴趣的同行们,自身实力过硬才是硬道理!



react-coat

学习一个框架或者技术首先是需要了解他的特点(以下是Github中文README中的介绍):

  • 集成 react、redux、react-router、history 等相关框架
  • 仅为以上框架的糖衣外套,不改变其基本概念,无强侵入与破坏性
  • 结构化前端工程、业务模块化,支持按需加载
  • 使用 typescript 严格类型,更好的静态检查与智能提示
  • 开源微框架,源码不到千行,几乎不用学习即可上手
  • 去除 redux-saga,改用原生的 async 和 await 来组织和管理 effect
  • 同时支持 SPA(单页应用)和 SSR(服务器渲染)、完整的支持客户端与服务端同构

从其特点可以看出,首先它是开源的,然后它还是小巧的,这样就给我们学习带来了方便,不到千行的代码量,我相信比起那些个重量级的框架来说,无论是学习还是使用都应该是相对容易的。react-coat的理念与dvaJS略同,Github上也提供了深度的对比,感兴趣的小伙伴可以参考原文!

PS:Github关键字: react-coat

代码示例

// 仅需一个类,搞定 action、dispatch、reducer、effect、loading
class ModuleHandlers extends BaseModuleHandlers {
 @reducer
 protected putCurUser(curUser: CurUser): State {
 return {...this.state, curUser};
 }
 @reducer
 public putShowLoginPop(showLoginPop: boolean): State {
 return {...this.state, showLoginPop};
 }
 @effect("login") // 使用自定义loading状态
 public async login(payload: {username: string; password: string}) {
 const loginResult = await sessionService.api.login(payload);
 if (!loginResult.error) {
 // this.updateState()是this.dispatch(this.actions.updateState(...))的快捷
 this.updateState({curUser: loginResult.data});
 Toast.success("欢迎您回来!");
 } else {
 Toast.fail(loginResult.error.message);
 }
 }
 // uncatched错误会触发@@framework/ERROR,监听并发送给后台
 @effect(null) // 不需要loading,设置为null
 protected async ["@@framework/ERROR"](error: CustomError) {
 if (error.code === "401") {
 // dispatch Action:putShowLoginPop
 this.dispatch(this.actions.putShowLoginPop(true));
 } else if (error.code === "301" || error.code === "302") {
 // dispatch Action:路由跳转
 this.dispatch(this.routerActions.replace(error.detail));
 } else {
 Toast.fail(error.message);
 await settingsService.api.reportError(error);
 }
 }
 // 监听自已的INIT Action,做一些异步数据请求
 @effect()
 protected async ["app/INIT"]() {
 const [projectConfig, curUser] = await Promise.all([
 settingsService.api.getSettings(),
 sessionService.api.getCurUser()
 ]);
 // this.updateState()是this.dispatch(this.actions.updateState(...))的快捷
 this.updateState({
 projectConfig,
 curUser,
 });
 }
}

安装

npm install react-coat

或者省心的做法,将包含所有依赖项

npm install react-coat-pkg

兼容性

各主流浏览器、IE9 或 IE9 以上,本框架依赖于完整版"Promise",低版本浏览器请自行安装 polyfill,推荐安装@babel/polyfill,该库可模拟 unhandledrejection error,当你需要在客户端捕捉错误并上报时需要。

快速上手

本框架上手简单

  • 8 个新概念:

Effect、ActionHandler、Module、ModuleState、RootState、Model、View、Component

  • 4 步创建:

exportModel(), exportView(), exportModule(), createApp()

  • 3 个 Demo(Github上提供了完整的DEMO),循序渐进:

SPA(单页) Helloworld

SPA(单页) 进一步优化

SPA(单页) + SSR(服务器渲染)


详细的文档可以直接查看Github中的介绍,包含了概念、示例、API以及还有和一些框架(DVA)的对比



总结

任何框架或者技术的出现都是为了解决某些特定或者共性的问题,React作为前端最流行的框架之一,还是值得前端开发者所学习的,不必纠结只学React或者Vue,甚至还有Flutter,一般一个技术的诞生以及壮大,无疑不是解决了某些常见的痛点,而最毫无疑问的是其思想上突破,学习也是一样!



相关推荐

NestJS入门教程系列一

介绍Nest(NestJS)是用于构建高效,可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript,内置并完全支持TypeScript(但开发人员仍然能够使用JavaScrip...

【推荐】一个网盘资源搜索与转存工具,支持移动端与PC端!

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍CloudSaver是一个基于Vue3和Express的网盘资源搜索与转存开源实用工具。它支持...

Appium原理精讲

目前使用Appium新版本和旧版本的企业数目都很多,而两个版本的安装过程和api的使用又有较大的区别。但是无论表面上的东东如何变化,内部原理都是一样的。在这里我给大家介绍一下appium的核心,增进大...

Kubernetes最小部署单元Pod

一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

最常用的四种跨域解决方案

前置知识什么是跨域?浏览器发送的请求地址(URL)与所在页面的地址不同(端口/协议/域名其一不同)。简言之,浏览器发出的请求url,与其所在页面的url不一样。此时,同源策略会让浏览器拒收服务器...

Bolt.New —— 全栈AI Web自动编程

Bolt.New是由StackBlitz公司推出的,全栈AI工具,代码编辑、运行、部署,通通一站式搞定。它使用WebContainers技术,无需任何本地安装或配置,在浏览器中,就可以运行完整的No...

Nodejs Express新手教程&高手进阶

NodejsExpress新手教程&高手进阶Express是一个NodeJS平台的框架,主要用于构于Web服务器项目。本文将通过示例介绍适合新手入门的Express基础使用,以及高手进阶知识,如:c...

Express.js 创建Node.js Web应用

Express.js是一个基于Node.js的Web应用框架,框架的设计目的是构建应用的架构和简化应用的开发。框架会解决一些通用的问题,在Express.js中,Express框架会处理如:中间件、代...

JavaScript 的 Express.js 功能及应用场景详解

Express.js是一个基于Node.js的轻量级Web应用框架,主要用于快速构建服务器端应用和API。它的核心功能包括以下关键点:1.路由管理URL路径与HTTP方法映射:通过...

nodejs的express4文件下载

在nodejs的express框架中,下载变得非常简单,就一个方法,res.download()首先express命令行生成项目基本框架:不会的看这里:http://blog.csdn.net/zz...

Express 系列:快速生成一个项目

系列预告本系列将以一个项目入手结合相关技术细节来带领大家一起学习Express这个基于Node.js的后端框架。本文首先将介绍:如何快速的生成一个具有一定结构的Express项目。Express项目结...

nodejs的express自动生成项目框架

nodejs版本为:4.X,express版本为4.X1.全局安装2个模块express、express-generator在命令行输入:npminstall-gexpressnpminsta...

express开发(一)简介与搭建

上周末去了趟上海书城,不愧是上海数得上号的书城,流行的科技书应有尽有,话不多说直接上图。最经典的C语言O(∩_∩)O最流行的java(づ ̄3 ̄)づ超酷的R语言/(ㄒoㄒ)/~~然而,身为一个坚定的前...

Vue+Echarts可视化大屏系统后端框架搭建(附代码)

各位同学,大家好。上节课,前面我们讲解了Vue+Echarts前端部分的设计方法。这节课程,我们开始讲解使用Express进行后端设计的方法。01项目相关理论介绍什么是expressExpress是...

Shopify电商API接口开发

Shopify电商API接口开发上线流程主要包括以下步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎洽谈合作。前期准备-注册Shopify账号:在Shopify官网注册,用于后续开发测试...

取消回复欢迎 发表评论: