5.1.2 • Published 11 months ago

ader v5.1.2

Weekly downloads
4
License
ISC
Repository
github
Last release
11 months ago

简介

用于组织react代码。分离数据,操作逻辑,和页面展示。

一、数据

通过class定义一个数据,并且通过createStore,创建数据模型实例。class内有几个必须属性:

名称说明 |
name表示这个数据模型的名字,之后都需要通过这个名字来进行数据的引用与修改
data数据结构与初始化,定义数据结构和初始化最初数据

数据模型有几个默认方法:

  • set:参数为一个或者两个,并且修改会触发两个事件,一个是change事件,另一个是change:[key]事件,key为当前更新的属性名称

    • 当参数是一个的时候,参数必须是一个对象,对象内为需要更新的数据和属性。且属性如果带‘.’符号,会递归数据找到需要更新的数据。例如 set({'a.b.c': '9'}')
    • 当参数是两个的时候,第一个参数是更新的key,第二个参数是更新的值
  • get:接受一个参数,参数可以是一个字符串和一个数组

    • 参数为字符串的时候,参数作为属性名,返回该属性值
    • 参数为数组的时候,数组作为属性名数组,返回与数组顺序相同的属性值
  • getType:返回数据类型,通过Object.prototype.toString.call实现

  • has:接受一个字符串作为参数,判断数据内该属性值,是否为undefined或者为null,是返回false,不是返回true

  • deepClone:接受最多一个对象作为参数,进行深拷贝,如果不传参数,则默认拷贝data属性,返回拷贝后的值

  • previous:接受最多一个字符串作为参数,返回上一次修改的值,如果不传参数,会返回上一次修改的整个对象

  • on: 接受两个参数,订阅事件,第一个参数为事件名称,第二个参数为回调函数

  • off:取消订阅

  • trigger:触发事件

model示例

// ./demo/model.js
export default class {
    name = 'm1'
    data = {
        name: '姓名不重要'
    }
    testName() {
        alert(this.name);
    }
}

action里调用model示例

// ./demo/action.js
export default class {
    changeName() {
        this.models.m1.set({
            name: '明天在来'
        });
    }

    didMount() {
        setTimeout(() => {
            this.changeName();
            this.models.m1.testName();
        }, 6000);


        console.log(this.models.m1.get('name'));
    }
}

组件里使用model内定义的数据示例

// ./demo/Home.js
import React from 'react';
import {render, createStore} from '../src/frame';
import ChildPage from './Child';
import Action1 from './action';

const Home = render({
    actions: {
        action1: Action1,
    },
    models: ['m1']
})(({props, state, action}) => {

    const {m1} = props;

    return (
        <div>
            {m1.name}
            <ChildPage />
        </div>
    );
});


export default Home

二、行为逻辑

通过class定义一个行为逻辑类,类里可以实现引用该类的组件的生命周期

  • didMount:组件的componentDidMount,多个action如果都有,会按次序执行

  • didUpdate:组件的componentDidUpdate

  • willUnMount:react组件的componentWillUnMount

  • shouldUpdate:react组件的shouldComponentUpdate

  • didAllInstance:一个组件的所有的action都实例化之后执行

  • didInstance:当前action类实例化后执行

类默认的属性

  • models:action通过这个属性调用数据模型的方法,models是个对象,存储的是所有创建的数据模型实例。

  • actions:同组件引用的其他action,是个对象,属性为组件绑定action的时候指定的属性

  • $instance:可以通过这个属性,拿到引用该类的组件实例

静态属性

  • extends:接收一个数组,数组内是该类需要继承的其他父类,且父类也可以有extends属性,以实现多重继承

默认方法

  • setState:同组件的setState

action示例

// ./demo/action.js
import Action3 from './action3';

export default class {

    static extends = [Action3]
    
    changeName() {
        this.models.m1.set({
            name: '明天在来'
        });
    }

    didMount() {
        console.log(this.models);
        setTimeout(() => {
            this.changeName();
            this.models.m1.testName();
            this.showAbc();
            this.showAbcde();
        }, 6000);
        console.log(this.models.m1.get('name'));
    }
}

三、渲染API

render函数,是连接数据和逻辑的关键方法。render函数被调用两次,第一次调用传入配置参数。第二次调用传入一个函数,该函数拥有一个对象作为参数,对象内有props,state,action三个属性,并且返回一个组件。

配置参数:

  • actions:对象,配置action,key为后续调用对应action的名称

  • models:数组,该组件需要用到的数据模型名称,注意在配置model之前需要确保它被createStore调用过。

    注意models在这里只跟组件绑定,与action无关,任意action都可以拿到所有的models。

  • state:为该组件定义的state值

render方法示例

// ./demo/Child.js
import React from 'react';
import {render, createStore} from '../src/frame';
import Action2 from './action2';
import Model2 from './model2';
createStore([Model2]);

const Child = render({
    actions: {
        action2: Action2
    },
    models: ['m2']
})(({props, state, action}) => {
    const {m2} = props;
    console.log(props);

    return (
        <div>
            {m2.childName}
        </div>
    );
});

export default Child;

四、主要API

  • render:调用两次,第一次传入配置参数,第二次传入一个返回jsx的函数。render函数返回一个组件

  • createStore:接受一个数组,数组元素为定义的Model类。

注:demo用的babel配置 { presets: '@babel/env', '@babel/react', plugins: 'transform-class-properties' }

5.1.2

11 months ago

5.1.0

2 years ago

5.0.0

2 years ago

4.0.8

3 years ago

4.1.3

3 years ago

4.1.2

3 years ago

4.1.1

3 years ago

3.0.7

3 years ago

3.0.6

3 years ago

4.0.7

3 years ago

3.0.5

4 years ago

3.0.4

4 years ago

3.0.3

4 years ago

3.0.2

5 years ago

3.0.1

5 years ago

3.0.0

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.3

5 years ago

1.0.0

5 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago