dvajs / dva

🌱 React and redux based, lightweight and elm-style framework. (Inspired by elm and choo)
https://dvajs.com/
MIT License
16.24k stars 3.17k forks source link

由于正在整理 dvajs.com,收集下各种 dva 教程、扩展库、插件等资源 #1751

Closed sorrycc closed 5 years ago

zjxpcyc commented 6 years ago

才写了个 tiny 版的自动同步状态插件 dva-plugin-autosync 。基于这个想法做的 issue-1725

chang-ke commented 6 years ago

dva结合react native的脚手架dva-native-cli

dkvirus commented 6 years ago

实际工作中遇到的 dva 相关问题但是没有文档的:我学dva那些事

sorrycc commented 6 years ago

https://raw.githubusercontent.com/dsmelon/dva-react-worms/master/dva.jpg https://github.com/dsmelon/dva-react-worms

sunnysk commented 6 years ago

@sorrycc 看图里面react生命周期componentDidMount里面写到可以执行setState,目前项目里面eslint规则不允许在didMount里面用setState。 https://segmentfault.com/q/1010000014789687/a-1020000014790390

dgeibi commented 6 years ago

dva-hot: HMR plugin for dva without babel

sorrycc commented 6 years ago

https://www.rails365.net/playlists/qing-song-xue-dva

sorrycc commented 6 years ago

https://github.com/Jetsly/dva-vue

fangkyi03 commented 6 years ago
fetch Model 使用方法 兼容现有的dva 可以直接进行移植使用

import * as request from './utils/request'
import * as netaApi from './utils/netaApi';
// 1. Initialize
const app = dva({
    fetchConfig:{
            // 这里填写你封装好的request文件 
            // 如get post delete等得 之后的method将会直接读取你这里暴露的名字
            netTool:request,
            // url传递有两种模式
            // 1.如果netApi为空的话 url:'/book'
            // 2.如果netApi不为空的话 需要传netApi暴露出来的函数名字 url:'book'
            netApi:netaApi,
            // 全局的网络开始处理
            // 每个人对于网络请求的处理规格都是不同的 
            // 如果返回false则会走到对应的onError中不会进行数据合并
            // 如果你返回任何其他的数据 都会直接跟对应网络请求target所对应的model原有state进行合并
            onGLNetStart:({retData})=>{
                debugger
                // 不要在这里做除了逻辑判断以外的多余操作
                if (retData.error_code == 0){
                    return retData.result
                }else {
                    return false
                }
            },
            // 全局错误处理
            // 如果上面的条件不符合的话 你可以在这里 直接中断下面的数据请求
            // 然后会进入到数据合并阶段
            onGLNetError:({retData})=>{
                // 如果数据走到这里的话 会继续数据合并 但是因为那条数据出现了错误 所以
                // 出错的那条网络请求是不会合并到model中 也就不会刷新数据
                // 避免因为接口出错 导致页面重新刷新 奔溃的问题
                // 你也可以在每个接口的fetch/sendData中截获单条请求的onError
                // 出错的onError在fetch这个model中将会被记录下来 你可以直接通过fetch.isNetError(接口名字来重放)
            },
            // 上面的网络错误仅仅只是不符合netStart的条件的一种错误 还有一种是直接catch抛出的 这种就比较严重了
            onGLNetCatch:()=>{

            },
            // 统一单条网络结束事件
            // 即使之前的网络请求已经进入到了onNetError中 依旧会继续执行
            // 除非你这个网络请求已经直接需要抛出异常了
            onGLNetFinall:()=>{

            },
            // 扩展属性
            // 如果你想在网络生命周期中使用对应的api 但是又不想每个文件都引入一次的话 就可以使用这个功能
            // 在这里将会帮你在所有的fetch函数中 都统一放入 通过这样的方式避免 每次使用一个功能 都需要先引入一遍的尴尬
            extendAttr:()=>({a:'1'}),
            // 全局的params
            // 在这里你可以全局传递对应的model数据 让你的fetch请求更加的干净
            // 比如你不在需要每次get 或者 post的时候 传递一个token等数据过去了
            GLParams:()=>({}),
            // 全局网络请求延迟处理 默认10秒
            GLTimeOut:10000,
            // 全局超时请求
            // onGLTimeOut
    }
});
    this.props.dispatch({type: 'fetch/sendData',payload:[
      {
        // 要修改的model名字 需要跟model中的namespace字段名字保持一致
        target: 'example',
        // 要请求的url地址名字 这里有两种写法
        // 如果在dva初始化时的fetchConfig中传入了netApi的话 则这里的名字需要跟netApi暴露出来的函数名字保持一致
        // 否则这里就等于直接传递url
        url: 'movie',

        // 需要传递过去的参数
        // params:{}, object

        // 单条网络请求的延迟时间
        // timeOut: number
        // 优先级 timeout > fetchConfig > 默认10秒

        // tranData:function
        // ts:转换网络请求以后数据的接口
        // 可以通过这种方式对网络请求返回的数据进行格式转换
        // tranData:(data)=>({list:data.list})

        // tranUrl : false | true
        // 如果你的url是这样的{specId}/id 只要tranUrl为true
        // 就会自动帮你从params中找到对应的specId进行转换

        // method 这个参数会跟fetchConfig中的netTool进行绑定
        // 如method:'get' 实际上就是读取netTool中的get函数来进行网络请求
        // 这里的名字可以你自己自定义 只要你netTool中有暴露出来就可以

        // isOnlyNet : bool 
        // 是否只是进行网络请求而不刷新页面 默认为false
        // 如果你只是想进行网络请求的话 设为true就可以

        // onError : function
        // 如果你相对单条接口进行错误管理的话 可以在这里进行
        // 这里并不会阻塞全局的错误管理 全局依旧可以收到
        // 错误管理的条件是fetchConfig.onNetStart不符合自定义要求的才会进入这里

        // onCallBack :function
        // tranData是用来做数据转换的 如果你想在数据正常获取的情况下 执行一些操作 
        // 比如this.setState的话 可以在这里进行 如果网络出现错误 是不会走到这里的

        // 小计
        // 因为这个payload是一个数组结构 所以你的多次网络请求会进行合并 只会在最后刷新一次
        // 并不会因为你有多个网络请求就会导致刷新多次
        // 其次 如果你想在发起一个网络请求以后取消这个请求的话 你只需要在重新发送一个
        // this.props.dispatch({type:'CANCEL_FETCH'}) 就可以取消那个队列的所有网络请求

        // 你也可以在fetchConfig.onNetStart中对当前的状态做出判断 只需要返回false 
        // 比如当前的token等不符合条件的时候 放弃所有请求 直到token符合要求
        // 就会走到对应的onError 而不会进行数据合并 也不会导致页面重新刷新
      }
    ]})

https://github.com/fangkyi03/dvajs

QinZonger commented 5 years ago

generator-dva,自己基于yeoman-generator写的一个react + dva的脚手架

安装包的时候会报错

hellohejinyu commented 5 years ago

generator-dva,自己基于yeoman-generator写的一个react + dva的脚手架

安装包的时候会报错

我这边在Windows和MacOS系统下均测试正常,安装依赖的话,如果是node-sass报错的话,是因为被墙了,需自行翻墙或使用cnpm

stale[bot] commented 5 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.