全局状态

全局状态是一个很实用的功能,例如管理用户信息,组件间状态共享等功能都需要用到全局状态,react有很多成熟的全局状态管理工具,但是很多写起来太过麻烦,duxapp提供了几种应对不同场景的全局状态的方案,当然如果你需要其他全局状态,可以自行集成

局部全局状态

这种全局状态方案的使用场景,在于父子组件之间的状态共享

import { contextState } from '@/duxapp'
import { Text } from '@/duxui' const A = () => { return <contextState.Provider defaultValue='张三'>
<B />
<C />
</contextState.Provider>
} const B = () => {
const [name] = contextState.useState() return <Text>{name}</Text>
} const C = () => {
const [, setName] = contextState.useState() return <Text onClick={() => setName('李四')}>设置名称为李四</Text>
}

也可以在A组件中控制这个值的变化

import { contextState } from '@/duxapp'
import { Text } from '@/duxui'
import { useState } from 'react' const A = () => { const [name, setName] = useState() return <contextState.Provider value={name}>
<B />
<C />
<Text onClick={() => setName('王五')}>设置名称为王五</Text>
</contextState.Provider>
} const B = () => {
const [name] = contextState.useState() return <Text>{name}</Text>
} const C = () => {
const [, setName] = contextState.useState() return <Text onClick={() => setName('李四')}>设置名称为李四</Text>
}

这里只演示了一层组件的嵌套,多层组件的嵌套也是支持的

全局状态

这个状态可以在整个运行时内所有页面或者组件内调用

import { createGlobalState } from '@/duxapp'

/** 需要在合适的地方创建,然后导出,在此处仅演示如何使用 */
const globalState = createGlobalState({ text: '默认值' }) // 任何地方设置值
globalState.setState({ text: '设置的值' }) // 在组件或者hook中取值
const data = globalState.useState()

这个方法使用比较单间,如果你需要更复杂的功能,例如用户信息管理,可以使用下面的全局状态管理

全局状态管理

全局状态管理是用 ObjectManage 这个类来实现的,你需要继续扩展编写这个类来实现功能,下面以用户信息管理来演示如何使用这个类

  • 定义一个用户管理类继承到ObjectManage
  • 通过data,编写默认数据
  • 通过构造函数设置 ObjectManage 的参数,参数的意思是使用缓存,缓存数据,当你更新数据时,数据会被自动设置到本地缓存中,下次启动将自动读取缓存
import { ObjectManage } from '@/duxapp'

class UserManage extends ObjectManage {

  constructor() {
super({
cacheKey: 'userInfo',
cache: true
})
} data = {
// 登录状态
status: false,
// ...其他模块的用户信息
}
} /**
* 实例化这个用户管理对象并且导出
*/
export const user = new UserManage()

这样就获得了一个基本的全局状态,要使用这些全局状态,可以在组件、hook、或者其他任何位置

// 直接调用当前数据
user.data.status // 使用hook调用数据
const data = user.useData()
data.status

要设置这些数据这样操作

// 使用hook调用数据
user.set({ status: true })
// 或者使用函数
user.set(oldData => ({ ...oldData, status: true }))

对于用户信息管理,他还需要一些其他的操作,都可以在用户管理类里面进行扩展,例如判断是否登录,去登录、退出登录、更新用户信息、获取线上用户信息等

import { ObjectManage } from '@/duxapp'

class UserManage extends ObjectManage {

  constructor() {
super({
cacheKey: 'userInfo',
cache: true
})
} data = {
// 登录状态
status: false,
// ...其他模块的用户信息
} isLogin = () => !!this.data.status login = () => {
// 登录逻辑
} logout = () => {
// 退出登录逻辑
} getOnlineUserInfo = () => {
// 请求用户信息接口更新用户信息
request('').then(res => this.set(res))
} setUsreInfo = data => {
this.set(old => ({ ...old, ...data }))
// 请求接口更新用户信息
request({
url: '',
method: 'POST',
data
})
}
} /**
* 实例化这个用户管理对象并且导出
*/
export const user = new UserManage()

这里仅是举例,用户模块里面的用户管理功能远比此例子复杂,可以前往查看

开发文档:http://duxapp.cn

GitHub:https://github.com/duxapp

duxapp放弃了redux,在duxapp中局部、全局状态的实现方案的更多相关文章

  1. 一个Time TodoList实例了解redux在wepy中的使用

    @subject: wepy-redux-time-todo @author: leinov @date:2018-10-30 @notice: 小程序(wepy)开发群110647537 欢迎加入 ...

  2. redux是全局状态(数据)的管理机制,局部数据没有意义

    redux是全局状态(数据)的管理机制,局部数据没有意义

  3. vue中局部封装axios

    Vue中局部配置axios 'use strict' import axios from 'axios'; import { Loading } from 'element-ui'; export c ...

  4. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  5. 你再也不用使用 Redux、Mobx、Flux 等状态管理了

    Unstated Next readme 的中文翻译 前言 这个库的作者希望使用 React 内置 API ,直接实现状态管理的功能.看完这个库的说明后,没有想到代码可以这个玩.短短几行代码,仅仅使用 ...

  6. 分布式系统中生成全局ID的总结与思考

    世间万物,都有自己唯一的标识,比如人,每个人都有自己的指纹(白夜追凶给我科普的,同卵双胞胎DNA一样,但指纹不一样).又如中国人,每个中国人有自己的身份证.对于计算机,很多时候,也需要为每一份数据生成 ...

  7. Vue 根组件,局部,全局组件 | 组件间通信,案例组件化

    一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...

  8. jstack Dump 日志文件中的线程状态

    [转]jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on condi ...

  9. 解决IE6中 PNG图片透明的终极方案-八种方案!

    “珍惜生命,远离IE6”,IE6中的bug令很多Web前端开发人员实为头疼,因此不知道烧了多少脑细胞,在众多的Bug中最令人抓狂的就是IE对png图片的不支持,导致设计师和重构师放弃了很多很炫的效果, ...

  10. jstack Dump 日志文件中的线程状态(转)

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on conditio ...

随机推荐

  1. TCP/IP协议竟然有这么多漏洞?

    据2020年上半年中国互联网网络安全监测数据分析报告显示,恶意程序控制服务器.拒绝服务攻击(DDoS)等网络攻击行为有增无减.时至今日,网络攻击已经成为影响网络信息安全.业务信息安全的主要因素之一. ...

  2. 玄机蓝队靶场_应急响应_01:linux日志分析

    个人感觉这个靶场主要考验对linux的命令的基础掌握,对日志路径的基本了解. 一:解题 (1)ssh连接靶场,先用命令lsb_release -a看看是什么系统.然后发现是Debian GNU/Lin ...

  3. ArcGIS创建渔网工具的使用方法

      本文介绍在ArcMap软件中,通过"Create Fishnet"工具创建渔网,从而获得指定大小的矢量格网数据的方法.   首先,我们在创建渔网前,需要指定渔网覆盖的范围.这里 ...

  4. 好多kafka难题啊,看看其中的化解之道

    文末有面经共享群 前面已经分享过几篇面试了,这是一篇关于更加面向项目和技术的面经详解,第一次遇见问那么多kafka的问题,看看这个粉丝是怎么回答的. 先来看看 职位描述: 岗位职责: 负责基于 Go ...

  5. NET Core 多身份校验与策略模式

    背景需求:   系统需要对接到XXX官方的API,但因此官方对接以及管理都十分严格.而本人部门的系统中包含诸多子系统,系统间为了稳定,程序间多数固定Token+特殊验证进行调用,且后期还要提供给其他兄 ...

  6. pc 移动端 双端切换-路由判断

    该封装主要以分类形式,实现对路由的简易区分.便于项目管理. 创建好项目,勾选路由插件,会自动生成 router文件夹与index.ts . index.ts 初始内容 创建项目 自动生成的router ...

  7. dataX是阿里开源的离线数据库同步工具

    dataX是阿里开源的离线数据库同步工具的使用 DataX介绍: DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.OD ...

  8. sql server 将数据库表里面的数据,转为insert语句,方便小批量转移数据

    create proc [dbo].[proc_insert] (@tablename varchar(256)) as begin set nocount on declare @sqlstr va ...

  9. Qml 实现瀑布流布局

    [写在前面] 最近在刷掘金的时候看到一篇关于瀑布流布局的文章,然鹅他们的实现都是前端的那套,就想着 Qml 有没有类似实现. 结果百度了一圈也没有( T_T Qml 凉了凉了 ),于是,我按照自己理解 ...

  10. 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验

    背景 在日常的购物转账.生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用.寻找应用.寻找扫码入口,才能完 ...