1.0.8 • Published 2 years ago

grey-react-box v1.0.8

Weekly downloads
184
License
-
Repository
-
Last release
2 years ago

轻量级的 分模块方式的数据状态管理

github

https://gitee.com/grey-ts/grey-react-box

  • 初始化
// box 的 状态
// 我们可以任意的添加我们需要的字段
export class UserInfoState {
    num = 0; // 这里是我们的一个例子
}


// box 对象
// 继承 GreyReactBox泛型为box状态对象
export default class UserInfo extends GreyReactBox<UserInfoState> {
    constructor() {
        super(new UserInfoState()); // 初始化box状态数据
    }

    // 通过 pipeline 方法来创建add方法,add执行完后,会触发关联了box状态的组件的渲染
    // boxStart 当前box的状态
    // option 调用add方法时的参数(必须为可选参数)
    add = this.pipeline(async(boxStart, option?:number) => {
        boxStart.num += option || 0;
    })
}
  • 通过hook关联数据 (推荐)
import { useContext } from 'grey-react-box';
import UserInfo from './UserInfo';

// 模块跟初始化
export default () => {

    // 初始化 box 实例
    const controller = React.useMemo(() => new UserInfo(), []);

    return (
        // 设置 box 的跟节点
        <Source box={controller}>
            <Main />
        </Source>
    )
}

const Main = () => {
    
    // 通过 useContext 获取到根部box的实例
    const controller = useContext<UserInfo>();

    // 通过 box的 useState 方法关联box的 num 属性
    const num = controller.useMemo(e => e.num, []);

    // 点击按钮事件,点击后给box的num属性加1 
    const onClickUserInfo = React.useCallback(() => {
        controller.pipeline(async boxStart => {
            boxStart.num += 1;
        })()
    })
    
    return (
        <div>
             {/* 按钮调用 onClickUserInfo 方法,并显示 num */}
            <Button onClick={onClickUserInfo} >+1:{num}</Button>

            {/* 按钮调用 controller.add 方法,并显示 num */}
            <Button onClick={() => { controller.add(2) }} >+2:{num}</Button>
        </div>
    )
})
  • 通过装饰器绑定数据
import { decorator, Source, ISourceChildProps } from 'grey-react-box';
import UserInfo from './UserInfo';

// 模块跟初始化
export default () => {

    // 初始化 box 实例
    const controller = React.useMemo(() => new UserInfo(), []);

    return (
        // 设置 box 的跟节点
        <Source box={controller}>
            <Main />
        </Source>
    )
}

const Main = decorator<any, ISourceChildProps<UserInfo>>(
    Source.connect() // 把根部的box实例注入到props里
)(props => {
    
    // 获取到box实例
    const { controller } = props;

    // 通过 box的 useState 方法关联box的 num 属性
    const num = controller.useMemo(e => e.num, []);

    // 点击按钮事件,点击后给box的num属性加1 
    const onClickUserInfo = React.useCallback(() => {
        controller.pipeline(async boxStart => {
            boxStart.num += 1;
        })()
    })
    
    return (
        <div>
            {/* 按钮调用 onClickUserInfo 方法,并显示 num */}
            <Button onClick={onClickUserInfo} >+1:{num}</Button>

            {/* 按钮调用 controller.add 方法,并显示 num */}
            <Button onClick={() => { controller.add(2) }} >+2:{num}</Button>
        </div>
    )
})
1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

0.2.22

3 years ago

0.2.21

3 years ago

0.2.20

3 years ago

0.2.19

3 years ago

0.2.18

3 years ago

0.2.17

3 years ago

0.2.16

3 years ago

0.2.15

4 years ago

0.2.13

4 years ago

0.2.12

4 years ago

0.2.11

4 years ago

0.2.10

4 years ago

0.2.1

4 years ago

0.2.7

4 years ago

0.2.6

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.0

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.0.35

5 years ago

0.0.34

5 years ago

0.0.33

5 years ago

0.0.32

5 years ago

0.0.31

5 years ago

0.0.30

5 years ago

0.0.29

5 years ago

0.0.27

5 years ago

0.0.28

5 years ago

0.0.26

5 years ago

0.0.23

6 years ago

0.0.24

5 years ago

0.0.22

6 years ago

0.0.21

6 years ago

0.0.20

6 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.16

6 years ago

0.0.17

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago