dva中数据层插件dva-core的使用

介绍

dva 首先是一个基于 reduxredux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-routerfetch,所以也可以理解为一个轻量级的应用框架。

数据流向

用户需要改变数据的时候,需要通过dispatch发起一个action,同步操作会直接通过Reducers改变State,如果是异步操作会先触发Effects然后流向Reducers最终改变State

特点

  • dva进行了模块的划分,有了命名空间
  • 每一个模块都有完整的结构,statereducereffect
  • effect是处理异步的部分,底层使用redux-sagas做异步流程的控制
  • 数据的修改都需要通过reducer

dva-core的使用

安装

npm install dva-core

dva-core的配置

// dva.js dva-core配置文件
import { create } from "dva-core";
// 数据模块的集合,返回的是数组
import models from "@/models";

// 编写创建函数
function createApp(opts) {
    let app = create(opts);
    // 注册model,必须每个都需要注册
    models.forEach(model => {
        app.model(model);
    })
    // 启动应用,必须在model注册完成后,在store获取之前
    app.start();
    // 获取store
    const store = app._store;
    app.getStore = () => store;
    app.dispatch = store.dispatch;
    return app;
}

const dva = createApp({});
export default dva.getStore();

将store注入到项目中

  • 将store注入到项目中,需要使用react-redux插件进行注入
// 入口文件
import React from 'react'
import {Provider} from 'react-redux'
import App from './app'

// 引入dva的配置文件,获取store
import store from './dva.js'

const Index = () => {
    return (
        <Provider store={store}>
            <App/>
        </Provider>
    )
}

在组件中的使用

  • 使用react-redux中的connect,将store放入组件中
import React from 'react'
import {connect} from 'react-redux'

const Home = props => {
    const {login} = props;
    
    return <h1>{login.name}</h1>
}

export default connect(store => ({
    login: store.login // 把登录模块的store注入项目中
}))(Home)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • dva框架的使用详解及Demo教程 在前段时间,我们也学习讲解过Redux框架的基本使用,但是有很多同学在交流群里...
    何蒙其实很好阅读 874评论 0 0
  • 学习笔记 原文地址:antDesignPro使用心得,快速开发必备。https://www.52pojie.cn/...
    kalshen阅读 44,736评论 8 85
  • Dva 源码解析 作者:杨光dva官网源码解析 隐藏在 package.json 里的秘密 随便哪个 dva 的项...
    席小超阅读 370评论 0 0
  • 一、Dva简介 首先Dva是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,D...
    凉雨_ce28阅读 447评论 0 1
  • title: dva的初识date: 2018-05-28 15:02:34tags: dva 内心独白 这段时间...
    Kris_lee阅读 1,455评论 0 2