loading插件

loading插件用于管理应用的加载状态,无需再每个页面或者组件中去维护loading态

使用方式方便,易懂

import zoro from '@opcjs/zoro'
import { createLoading } from '@opcjs/zoro-plugin'

const app = zoro()
app.model(...)
app.use(createLoading())
const store = app.start()

当我们引入该插件,该插件会在全局添加如下state

{
    "loading": {
        "global": false,
        "model": {},
        "effect": {}
    }
}

当我们发起一个异步action,比如dispatcher.user.login(),状态改变如下:

{
    "loading": {
        "global": true,
        "model": {
            "user": true
        },
        "effect": {
            "user/login": true
        }
    }
}

当login调用结束,状态改变如下:

{
    "loading": {
        "global": false,
        "model": {
            "user": false
        },
        "effect": {
            "user/login": false
        }
    }
}
  • global 标记全局中是否有异步action在执行
  • model 标记对应model中是否有异步action在执行
  • effect 标记某个异步action是否在执行中

临时禁止loading

zoro-plugin@2.1.1版本及以后支持

某些情况下,我们可能想要禁止某个异步action触发loading

 dispatcher.goods.queryGoods({}, { disableLoading: true })

这样本次触发异步action,不再设置loading状态

区分loading场景

zoro-plugin@2.1.1版本及以后支持

对于复杂场景,我们需要区分不同场景或者不同时刻,比如初次加载场景,以及刷新的场景

这是非常常见的场景,对于h5业务或者小程序业务,往往我们为了优化用户体验,在页面首次加载时,会首先呈现骨架屏,再次刷新时,不会显示骨架屏,那么我们如何区分这两个场景呢

比如首次加载场景

dispatcher.goods.queryGoods({}, { loadingKey: 'init' })

此时的状态改变如下

{
    "loading": {
        "global": true,
        "model": {
            "user": false,
            "goods": true,
        },
        "effect": {
            "user/login": false
        },
        "init": {
            "goods/queryGoods": true
        }
    }
}

再次刷新(指的下拉刷新,或者上拉刷新或者其他方式)

dispatcher.goods.queryGoods()

状态改变如下:

{
    "loading": {
        "global": true,
        "model": {
            "user": false,
            "goods": true,
        },
        "effect": {
            "user/login": false,
            "goods/queryGoods": true,
        },
        "init": {
            "goods/queryGoods": false
        }
    }
}

createLoading(option) <Function>

  • option.namespace <String> 定义存储在全局state中的key名,默认值为loading

微信原生小程序中使用

import createLoading from './zoro-loading'

results matching ""

    No results matching ""