dva学习

使用history路由

//安装history
"npm i history -S"

//配置到index.js中
const app = dva({
    history: createBrowserHistory(),
})

.webpackrc文件更改为.webpackrc.js


//配置文件
export default {
    publicPath: '/',

    extraBabelPlugins: [
        ['import', { 'libraryName': 'antd', 'libraryDirectory': 'es', 'style': 'css' }]
    ],

    alias: {
        '@': `${__dirname}/src`,
    },

    proxy: {
        '/api': {
            target: 'url网址',
            changeOrigin: true,
            pathRewrite: {
                '^/api': '',
            }
        }
    }
}

models存放redux

//state定义redux数据
state: {
    name: "XXX"
}

//reducers触发变更----只能修改同步数据
reducers: {
    updateName(state, action) {
    return { ...state, name: action.payload }
  }
}

//effects修改异步数据
effects: {
    *fetch({ payload }, { call, put, select }) {
      //调用接口
      const dt = yield call(homeApi.bill)
      //在异步里触发一个reducer使用put
      yield put({
        type: 'updateData',
        payload: { data: dt }
      })
    }
  }

subscriptions自动执行

test({ history, dispach }) {
      history.listen(({ pathname }) => {
        //这里正则判断
        const regxp = pathToRegexp(/\//img).test(pathname)
        if (regxp) {
          //这里可以写路由守卫
          console.log(regxp)
    }
  })
}

services对应models中的每个文件

import api from './api'  //调用封装导出的接口
import { get } from '@/utils/request'  //调用request

export const bill = () => get(api.findUser)

connect

//不从redux中引入  从dva中引入 使用方法一样
import { connect } from 'dva'

@connect(state => {
    return {
        name: state.home.name
    }
}) 
export default class extends React.Component {
    render() {
        const { name } = this.props
        return (
            <h1>{name}</h1>
        )
    }
}

触发dispatch修改同步/异步数据

this.props.dispatch({
    type: 'home/updateName', //与models中定义的reducers的方法名相同
    payload: 'XXX'
})

数据持久化

//index.js配置
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'

const persistConfig = {
    key: 'home',
    storage,
    whitelist: ['home']  //白名单
}

const persistEnhancer = () => createStore => (reducer, initialState, enhancer) => {
    const store = createStore(persistReducer(persistConfig, reducer), initialState, enhancer)
    const persist = persistStore(store)
    return { ...store, persist }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。