1.0.8 • Published 1 year ago

grey-react-box v1.0.8

Weekly downloads
184
License
-
Repository
-
Last release
1 year 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

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

0.2.22

2 years ago

0.2.21

2 years ago

0.2.20

2 years ago

0.2.19

2 years ago

0.2.18

2 years ago

0.2.17

2 years ago

0.2.16

2 years ago

0.2.15

3 years ago

0.2.13

3 years ago

0.2.12

3 years ago

0.2.11

3 years ago

0.2.10

3 years ago

0.2.1

3 years ago

0.2.7

3 years ago

0.2.6

3 years ago

0.2.9

3 years ago

0.2.8

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.5

3 years ago

0.2.4

3 years ago

0.2.0

3 years ago

0.1.11

3 years ago

0.1.10

3 years ago

0.1.9

3 years ago

0.1.8

3 years ago

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.0.35

4 years ago

0.0.34

4 years ago

0.0.33

4 years ago

0.0.32

4 years ago

0.0.31

4 years ago

0.0.30

4 years ago

0.0.29

4 years ago

0.0.27

4 years ago

0.0.28

4 years ago

0.0.26

4 years ago

0.0.23

4 years ago

0.0.24

4 years ago

0.0.22

4 years ago

0.0.21

4 years ago

0.0.20

4 years ago

0.0.19

4 years ago

0.0.18

4 years ago

0.0.16

4 years ago

0.0.17

4 years ago

0.0.15

4 years ago

0.0.14

4 years ago

0.0.13

4 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago