美文网首页web 杂谈Web前端之路React Native开发
gi-mini-dvajs 一个 dva 的非单页解决方案

gi-mini-dvajs 一个 dva 的非单页解决方案

作者: 高少辉_骚辉 | 来源:发表于2017-09-24 12:30 被阅读373次

    gi-mini-dvajs

    • gi 是基于 dva 的代码组织方式 + redux 数据管理思想开发的一个多页面解决方案。

    • 主要为了解决 dva 不够方便的多页面应用

    • github: https://github.com/gwiron/gi

    特性

    • 易学易用,对 dva 代码风格一致,api 差不多
    • 轻量级,库非常小
    • elm 概念:通过 reducers, effects 和 subscriptions 组织 model

    如何开始

    安装

    npm install --save gi-mini-dvajs
    

    引入

    // es6
    import Gi from 'gi-mini-dvajs'
    
    const app = Gi()
    

    api

    • Gi()
      • use
      • model
      • router
      • start
    • connect

    ps:

    由于 api 和 dva 差不多,这边就不多介绍了,可以参考《dva 入门:手把手教你写应用 》

    api 和 dva 不同的地方

    app.use 方法里面的钩子只实现了部分

    app.use({
        onAction: 
        ,onError: 
        ,onStateChange: 
    })
    

    app.router 的不同,dva 是使用 react-router 模块来实现单页路由,我们是多 html 使用同一的入口形式,所以路由注册方式不一样( 可以看我之前写的一篇博客,有说明同一入口的概念

    import PageMoudle1 from 'PageMoudle1'
    import PageMoudle2 from 'PageMoudle2'
    import PageMoudle3 from 'PageMoudle4'
    
    app.router(function ( register ) {
    
        register("/PageMoudle1.html", PageMoudle1)
        register("/PageMoudle2.html", PageMoudle2)
        register("/PageMoudle3.html", PageMoudle3)
    
    })
    

    connect,只实现了 mapStateToProps

    example

    app.js

    import Gi from 'gi-mini-dvajs'
    
    // app.use()
    
    app.router(function ( register ) {
    
        register("/my-test.html", MyTest)
    })
    
    app.module({
      namespace: 'count',
      state: {
        record: 0,
        current: 0,
      },
      reducers: {
        addCount (state) {
          const newCurrent = state.current + 1;
          return { ...state,
            record: newCurrent > state.record ? newCurrent : state.record,
            current: newCurrent,
          };
        },
        minus(state) {
          return { ...state, current: state.current - 1}
        },
      },
      effects: {
        async add(action, { select, call, put }) {
          console.log( await select(({ count }) => {
            return count
          }))
          await put({ type: 'minus' })
        },
      },
      subscriptions: {
        keyboardWatcher() {
          console.log('--> subscripttion' )
        }
      }
    })
    
    app.start('#root')
    

    my-test.js

    import React, { Component } from 'react'
    import util from './lib/util'
    import { connect } from 'gi-mini-dvajs'
    
    class MyTest extends Component {
      render () {
        const { count, dispatch } = this.props
        return <div >
           <h1>count.current ---> { count.current }</h1>
           <div style={{
             height: 200
             ,backgroundColor: 'red'
           }} onClick={() => {
             console.log( 'click')
             dispatch({type: 'count/add'})
          }}></div>
         </div>
      }
    }
    
    
    function mapStateToProps ( state ) {
      return state
    }
    export default connect( mapStateToProps )( MyTest )
    

    相关文章

      网友评论

        本文标题:gi-mini-dvajs 一个 dva 的非单页解决方案

        本文链接:https://www.haomeiwen.com/subject/dhskextx.html