Mihux 使用文档

Mihux 是什么

Mihux 是一款 基于 react-hooks-redux 封装的react状态管理器,力求更大程度的简化数据流转,使开发者将更多的精力放在更有价值的代码逻辑实现上

主要思想

  • Mihux 是一款面向新手的 react 状态管理器(使用者无需关心数据传递和共享的问题)
  • Mihux 采用集中注册,集中输出的方式管理数据
  • Mihux 模拟双向数据绑定,并采用 immutable 对数据进行 map 化处理,防污染

目录结构

  • DVC(数据管理器)模式是 Mihux 推荐的目录结构

src
 ├─ containers
 │   └─ PageName - 业务模块
 │        ├─ dvc
 │        │   ├─ mutation.js - 方法集
 │        │   ├─ dataOv.js - 数据字段实例
 │        │   └─ index.js  - 注册入口
 │        ├─ index.scss
 │        └─ index.tsx - 页面入口 

安装 Mihux

package:https://www.npmjs.com/package/mihux

 $ npm i mihux -S

快速上手

  • dvc/dataOv
// 导出一个数据实例(
// 条件允许的情况下可与接口参数名保持一致
export default {
    testData: 0,
    asyncTestData: 0,
}

  • dvc/mutation

// 异步方法集

export const async = {
    async toDoSth(state, values, { getValue, setState, setInState, mergeState, mutation }) {
        const anyThing = () => new Promise(resove => {
            let data = getValue(state,'asyncTestData') //如果为map则返回常规值
            setTimeout(() => {
                data++
                resove(data)
            }, 1000)
        })
        let res = await anyThing()
        // 必须 return 一个 map 用于 dispatch
        return mergeState({ asyncTestData: res })
    }
}

//  同步方法集
export const sync = {
    toDoSth(state, values, { getValue, setState, setInState, mergeState, mutation }) {
        let test = getValue(state, 'testData')
        test++
        // 必须 return 一个 map 用于 dispatch
        return setState('testData',test)
    }
}

state - map 格式的数据实例

values - 接收任意格式的入参

getValue - 执行 state.get(name) 得到 map 则 return toJS 后的结果 ,否则 直接 return

setState - 获取最新的 mapreturn mapDatas.set 的结果;入参比照 mapDatas.set

setInState - 获取最新的 mapreturn mapDatas.setIn 的结果;入参比照 mapDatas.setIn

mergeState - 获取最新的 mapreturn mapDatas.merge 的结果; 入参比照 mapDatas.merge

mutation - 包含自定义的同步方法集和异步方法集
异步方法以 async 开头,原方法首字母大写

以上述代码为例,async toDoStr 调用时为 mutation.asyncToDoStr()

  • dvc/index
import { Mihux, Context, useComponent } from 'mihux'
import state from './dataOv'
import { sync, async } from './mutation'
const mihux = new Mihux()
mihux.register({
    state, // 绑定数据实例
    sync, // 绑定同步方法
    async // 绑定异步方法
})
const Provider = mihux.Provider
export { Provider, Context, useComponent }

Provider - 数据共享容器
Context - 数据存储上下文
useComponent - 兼容类组件(不完全兼容)

  • 在业务代码中使用
import React, { purComponent, useContext } from 'react';
import { Provider, Context, useComponent } from '../dvc'
function App(){
    return (
        <Provider>
            <ChildFunc/>
            <ChildClassToFunc/>
        </Provider>
    )
}

const ChildFunc = (props) => {
    const {
        testData,
        asyncTestData,
        toDoSth,
        asyncToDoSth
    } = useContext(Context)

    return (
        ...
    )
}

// 不推荐使用 class component
class ChildClass extends purComponent {
    render(){
        const {
            testData,
            asyncTestData,
            toDoSth,
            asyncToDoSth
        } = useContext(Context)

        return (
            ...
        )
    }
}

const ChildClassToFunc = useComponent(ChildClass)

借助 useComponent 可以在 class component 中使用所有 hooks 的 api,但抛弃了除 componentWillMountcomponentDidMount 之外的 钩子函数


灵感来源

Mihux 参考依赖或参考两款已有的开源状态管理器完成开发:

熟悉上述两款react状态管理器,将有助于了解 Mihux


Mihux 源码:

Github:https://github.com/mihu-team/mihux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值