成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Dva.js總結(jié)

mj / 1365人閱讀

摘要:是基于現(xiàn)有應(yīng)用架構(gòu)等的一層輕量封裝,沒(méi)有引入任何新概念,全部代碼不到行。他最核心的是提供了方法,用于把封裝到一起表示的狀態(tài)數(shù)據(jù)觸發(fā)的函數(shù),是改變的唯一途徑被稱為副作用,在我們的應(yīng)用中,最常見(jiàn)的就是異步操作在中聚合積累的結(jié)果是當(dāng)前的對(duì)象。

1.why Dva
dva 是基于現(xiàn)有應(yīng)用架構(gòu) (redux + react-router + redux-saga 等)的一層輕量封裝,沒(méi)有引入任何新概念,全部代碼不到 100 行。dva 實(shí)現(xiàn)上盡量不創(chuàng)建新語(yǔ)法,而是用依賴庫(kù)本身的語(yǔ)法,比如 router 的定義還是用 react-router 的 JSX 語(yǔ)法的方式(dynamic config 是性能的考慮層面,之后會(huì)支持)。
他最核心的是提供了 app.model 方法,用于把 reducer, initialState, action, saga 封裝到一起
app.model({
  namespace: "products",
  state: {//State 表示 Model 的狀態(tài)數(shù)據(jù)
    list: [],
    loading: false,
  },
  subscriptions: [
    function(dispatch) {
      dispatch({type: "products/query"});//觸發(fā) action 的函數(shù),action 是改變 State 的唯一途徑
    },
  ],
  effects: {//Effect 被稱為副作用,在我們的應(yīng)用中,最常見(jiàn)的就是異步操作
    ["products/query"]: function*() {
      yield call(delay(800));
      yield put({
        type: "products/query/success",
        payload: ["ant-tool", "roof"],
      });
    },
  },
//在dva中reducers聚合積累的結(jié)果是當(dāng)前model的state 對(duì)象。通過(guò)actions中傳入的值,
//與當(dāng)前 reducers 中的值進(jìn)行運(yùn)算獲得新的值(也就是新的 state)
  reducers: {
    ["products/query"](state) {
      return { ...state, loading: true, };
    },
    ["products/query/success"](state, { payload }) {
      return { ...state, loading: false, list: payload };
    },
  },
});
2.簡(jiǎn)單明了的Dva數(shù)據(jù)流向
數(shù)據(jù)的改變發(fā)生通常是通過(guò)用戶交互行為或者瀏覽器行為(如路由跳轉(zhuǎn)等)觸發(fā)的,當(dāng)此類行為會(huì)改變數(shù)據(jù)的時(shí)候可以通過(guò) dispatch 發(fā)起一個(gè) action,如果是同步行為會(huì)直接通過(guò) Reducers 改變 State ,如果是異步行為(副作用)會(huì)先觸發(fā) Effects 然后流向 Reducers 最終改變 State

3.Dva Router控制
dva 實(shí)例提供了 router 方法來(lái)控制路由,使用的是react-router
const app = dva();
import { Router, Route } from "dva/router";
app.router(({history}) =>
  
    
  
);
4.dva 應(yīng)用的最簡(jiǎn)結(jié)構(gòu)(帶 model)
dva 提供多個(gè) effect 函數(shù)內(nèi)部的處理函數(shù),比較常用的是 call 和 put。
call:執(zhí)行異步函數(shù)
put:發(fā)出一個(gè) Action,類似于 dispatch

課堂實(shí)戰(zhàn)

// 創(chuàng)建應(yīng)用
const app = dva();

// 注冊(cè) Model
app.model({
  namespace: "count",
  state: 0,
  reducers: {
    add(state) { return state + 1 },
  },
  effects: {
    *addAfter1Second(action, { call, put }) {
      yield call(delay, 1000);//異步操作
      yield put({ type: "add" });//類似于dispatch發(fā)action
    },
  },
});

// 注冊(cè)視圖
app.router(() => );

// 啟動(dòng)應(yīng)用
app.start("#root");

5.AntDesignPro1.0項(xiàng)目中的Dva

1.index.js

const app = dva({
  history: createHistory(),//history可以用來(lái)跳轉(zhuǎn)路由內(nèi)含location屬性,這里修改history默認(rèn)接口,其他接口不變----初始化
});

// 2. Plugins
app.use(createLoading());//加載插件這里應(yīng)該加載的是加載動(dòng)畫插件

// 3. Register global model
app.model(require("./models/global").default);//將src/modles里面的東西灌進(jìn)去,通過(guò)namespace取

// 4. Router
app.router(require("./router").default);//全局掛載路由信息

// 5. Start
app.start("#root");

export default app._store; 

2.router.js

export const getRouterData = app => {
    const routerConfig = {
        "/": {
            component: dynamicWrapper(app, ["user", "login"], () => import("../layouts/BasicLayout")),
        },
        "/person/personbasetwo": {//添加路徑指向引入的組件,這條數(shù)據(jù)會(huì)被getRoutes函數(shù)渲染成真正的包裹的路由
          component: dynamicWrapper(app, ["personbaseTwo"], () => import("../routes/Person/PersonBaseTwo")),
        },
        "/person/baseInfo/:id": {//dynamicWrapper函數(shù)會(huì)吧[]里面數(shù)據(jù)放到app的model屬性里,app是dva的實(shí)例
          component: dynamicWrapper(app, ["personbase"], () => import("../routes/Person/PersonBase/BaseInfo")),
        },
        ·······

3.connect連接model

/*dva的實(shí)例app中應(yīng)該導(dǎo)入了所有的model,好像是在router中導(dǎo)入的,
這里用解構(gòu)賦值從model中取值,為組件導(dǎo)入props,loading為dva提供的動(dòng)畫插件*/
@connect(({ personbaseTwo, loading }) => ({
  personbaseTwo,
  searchLoading: loading.effects["personbaseTwo/getList"],
//loding被這個(gè)異步函數(shù)影響,異步操作中就為ture,結(jié)束就為false
  loading: loading.effects["personbaseTwo/listpage"],
}))//從model中取數(shù)據(jù)生成自己想要的對(duì)象結(jié)構(gòu)通過(guò)@修飾器放到下面組件中去
class personbaseTwo extends Component {
  constructor(props){
    super(props);
    this.state = {
    }
  }
  componentWillMount(){//組件將要渲染時(shí)拿到默認(rèn)的一頁(yè)多少條和當(dāng)前頁(yè)這些數(shù)據(jù)
    const { personbaseTwo:{pagination} }= this.props;
    const { page,pageSize } = pagination;
    this.props.dispatch({//轉(zhuǎn)到namespace為personbaseTwo下面的listpage方法拿到頁(yè)碼為page的數(shù)據(jù)
      type:"personbaseTwo/listpage",//接口根據(jù)page只去此頁(yè)數(shù)據(jù)
      payload:{
        page,
        pageSize,
      },
    });
  }
·······

4.跳轉(zhuǎn)路由

onOk() {//點(diǎn)擊確定執(zhí)行的函數(shù)
          const {id}= record;
          than.props.dispatch(routerRedux.push({//用來(lái)跳轉(zhuǎn)路由的
            pathname: `/person/baseInfoTwo/${id}`,//用這個(gè)pathname重新渲染路由頁(yè)面并傳ID
          }))
        },

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108890.html

相關(guān)文章

  • (入門)手把手帶你更簡(jiǎn)單的使用dva

    摘要:介紹首先是一個(gè)基于和的數(shù)據(jù)流方案,然后為了簡(jiǎn)化開(kāi)發(fā)體驗(yàn),還額外內(nèi)置了和,所以也可以理解為一個(gè)輕量級(jí)的應(yīng)用框架。 介紹(dva.js) dva 首先是一個(gè)基于 redux 和 redux-saga 的數(shù)據(jù)流方案,然后為了簡(jiǎn)化開(kāi)發(fā)體驗(yàn),dva 還額外內(nèi)置了 react-router 和 fetch,所以也可以理解為一個(gè)輕量級(jí)的應(yīng)用框架。 特性 易學(xué)易用,僅有 6 個(gè) api,對(duì) redu...

    makeFoxPlay 評(píng)論0 收藏0
  • 基于Dva.js的Blog SPA實(shí)踐

    摘要:項(xiàng)目地址項(xiàng)目預(yù)覽登錄流負(fù)責(zé)全局的登錄狀態(tài)管理。總體思想所有的組件都盡量是所有的狀態(tài)組件一般都是路由組件。所有的分發(fā)都交給了路由組件來(lái)完成。數(shù)據(jù)的獲取有兩種方式。一種是官方推薦的使用在訂閱數(shù)據(jù)源。 項(xiàng)目地址 https://github.com/HeskeyBaoz... 項(xiàng)目預(yù)覽 showImg(https://segmentfault.com/img/bVIQHX?w=1249&h=...

    vslam 評(píng)論0 收藏0
  • UMI.js使用方法

    摘要:或者在中導(dǎo)入樣式文件存放全局通用請(qǐng)求存放通用方法這是時(shí)生產(chǎn)的臨時(shí)目錄,默認(rèn)包含和,有些插件也會(huì)在這里生成一些其他臨時(shí)文件。項(xiàng)目中常用于發(fā)送請(qǐng)求,等待服務(wù)端響應(yīng)數(shù)據(jù)。如果使用的裝飾器則為 umi.js使用方法 node環(huán)境安裝 在官網(wǎng)下載與系統(tǒng)相應(yīng)的node版本,node.js版本>=8.10 編輯器 推薦使用Visual Studio Code 安裝方法 安裝umi npm insta...

    hearaway 評(píng)論0 收藏0
  • 如何使用ReactNative快速開(kāi)發(fā)一個(gè)APP

    摘要:鑒于我平常使用的是系統(tǒng),就決定我只開(kāi)發(fā)安卓客戶端,客戶端我們又招了一個(gè)小伙伴。一般來(lái)講,安卓系統(tǒng)是這一兩年市面上常用機(jī)型配置的系統(tǒng)。 從去年的10月份開(kāi)始,我的大部分工作重心從傳統(tǒng)的前端開(kāi)發(fā)轉(zhuǎn)向了使用ReactNative開(kāi)發(fā)APP,在這個(gè)過(guò)程當(dāng)中,走過(guò)了不少?gòu)澛?,也遇到了一些技術(shù)相關(guān)的問(wèn)題,但總算沒(méi)有辜負(fù)那些對(duì)我信任的人。經(jīng)歷過(guò)痛苦和無(wú)助,終于堅(jiān)持了下來(lái),一個(gè)月的時(shí)間把產(chǎn)品成功部署上...

    taowen 評(píng)論0 收藏0
  • vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案

    摘要:去年年底自己搭了一個(gè)在移動(dòng)端的開(kāi)發(fā)框架,感覺(jué)體驗(yàn)不是很好。路由懶加載首頁(yè)終于寫完了,以上這些就是我在移動(dòng)端體驗(yàn)優(yōu)化的實(shí)戰(zhàn)。去年年底自己搭了一個(gè)vue在移動(dòng)端的開(kāi)發(fā)框架,感覺(jué)體驗(yàn)不是很好。上個(gè)星期又要做移動(dòng)端的項(xiàng)目了。所以我花了兩天時(shí)間對(duì)之前的那個(gè)開(kāi)發(fā)框架做了以下優(yōu)化 自定義vuex-plugins-loading 路由切換動(dòng)畫 + keep alive 動(dòng)態(tài)管理緩存組件 better-sc...

    godlong_X 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mj

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<