Vanex支持插件机制,使用的方式如下:

import { start, use } from 'vanex';

import effectPlugin from './effect-plugin';

use(effectPlugin);

// start代码

API

onStateChange

用于监听数据发生改变的时候的触发回调。格式如下:

export default {
    onStateChange: [event => {
        console.log(event);
    }]
};

onEffect

用于处理异步执行执行前(before)、后(after)、错误(error)以及过滤哪些effects执行该回调,它在执行的时候其实是以中间件的形式来执行的。如果有类似于每次请求都自带csrfToken的需求,则可以在before钩子函数中组装。

具体使用如下:

// Before exec action
function preLogger({
    type,
    payload
}) {
    console.log(`[${type}] params: `, payload);

    payload。csrfToken = 'xxx'; // 这里的更改会对请求参数生效

    return payload;
}

// Action exec fail
function errorLogger({
    type,
    payload
}) {
    console.log(`[${type}] error: `, payload.message);
    return payload;
}

// After exec action
function afterLogger({
    type,
    payload
}) {
    console.log(`[${type}] result: `, payload);
    return payload;
}

export default {
    filter({
            type
        }) {
        return /^User/.test(type); // 只针对Model名字是User的进行下面钩子函数的执行
    },
    before: preLogger,
    after: afterLogger,
    error: errorLogger,
};

onAction

用于在执行syncs Action之后触发。格式如下:

export default {
    onAction: [(
        actionName,
        actionArgs,
        result) => {
            console.log(`当前执行Action的名字:${actionName}`);
            console.log(`当前执行Action的参数:${actionArgs}`);
            console.log(`当前执行Action的结果:${result}`);
        }]
};

getActionState

这个并不是Vanex插件,但是用于解决在组件中获取当前model中某个effect是否正在发送请求的问题,而这个状态可以用于方便的控制Loading组件是否可见。因为这种需求非常普遍,所以Vanex直接内置到内部实现中。使用示例如下:

const {
    user 
} = this.props;

const {
    loading: loginLoading,
    error: loginError 
} = user.getActionState('user/login');

results matching ""

    No results matching ""