热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rims换个方式使用Redux

Rims-deck即插即用的react与redux连接池,提供与react-redux相同的api.Whynotreact-redux?react项目一般都由一颗组件树构成,每

Rims-deck

即插即用的 reactredux 连接池, 提供与 react-redux 相同的 api.

Why not react-redux ?

react 项目一般都由一颗 "组件树" 构成, 每个组件变成了这棵树上的节点, react-redux 通过 context 作为中介与各个组件通信

这就意味着如果有一个组件脱离了这颗树, 那么这个组件将无法与 store 通信. 例如 一个特殊的弹框组件

另一方面, 对于一些较为特殊的 react 应用(即依靠浏览器或其他路由方式的多页面应用), 这样页面跳转后只能依靠数据持久化方式( sessionStorage localStorage 等)共享数据.

这种情况下, 由于基本上很难存在 根组件 的概念, react-redux 就显得无比乏力.

Why rims ?

rims 仅仅是在一些特殊场景下代替了 react-redux(还是需要 redux)

rims 可以与 react-redux 共存(同一组件不要同时使用二者的 connect), 可将 store 直接传入 createConnect, 只维护一个 store. => demo

实质上 rimsconnect 组件的结果是将组件直接与 store 相连

使用 rims, 首先需要创建 store 和构建 connect 方法

import { createConnect } from 'rims';
export default createConnect(store);

createConnect(store) 就是我们创建好的 connect 方法, 可以看出与 react-redux 使用不同的地方在于: rims 需要自行创建 connect

Quick Start

Installation

npm install --save rims

or

yarn add rims

Create store and connect

// createConnect.js
import { createStore } from 'redux';
import reducers from './reducers';
import { createConnect } from 'rims';const store = createStore(reducers);export default createConnect(store);

需要创建一个新的文件, 用于创建 storecreateConnect

创建 store, 我们仅替换了 react-redux, 好消息是若你此前配置过 store, 那么 store 不需要变动, 仅仅导出 createConnect 即可. 当然这也意味着我们仍然可以用 redux 的生态: redux-thunk redux-logger redux-devtools 等.

Connect Components

import connect from './createConnect';@connect(state => state)
class App extends React.Component{// ...
}

多页面应用状态共享

通过状态数据持久化实现, 使用 redux-persist 实现状态数据持久化.

// createConnect.js
import { createStore } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import reducers from './reducers';
import { createConnect } from 'rims';const persistConfig = {key: 'root',storage: storageSession,
};const persistedReducer = persistReducer(persistConfig, reducers);const store = createStore(persistedReducer);export default createConnect(store);

最后

rims 仍然有许多不足, 如果你对 rims 感兴趣, 欢迎加入

=> get rims

转:https://juejin.im/post/5c35a3b1e51d4550fc42c732



推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • TunesKit AceMovi视频编辑软件的背景音乐添加方法
    TunesKit AceMovi是一款功能强大的视频编辑软件,本文介绍了使用TunesKit AceMovi给视频添加背景音乐的具体操作方法,包括导入文件、选择音乐素材、拖拽到时间线、分割音频等步骤。通过添加适当的背景音乐,可以提升视频的感染力。详细的操作步骤在文章中有详细介绍,适合需要给视频添加背景音乐的用户使用。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
author-avatar
姿葱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有