reactdva指的是什么

這篇文章主要介紹了react dva指的是什么,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是專業(yè)的秀山土家族苗族網(wǎng)站建設(shè)公司,秀山土家族苗族接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行秀山土家族苗族網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

在react中,dva是一個基于redux和redux-saga的數(shù)據(jù)流方案,然后為了簡化開發(fā)體驗(yàn),dva還額外內(nèi)置了react-router和fetch,所以也可以理解為一個輕量級的應(yīng)用框架。

dva介紹

dva官網(wǎng)地址:https://dvajs.com/

dva是螞蟻金服推出的一個單頁應(yīng)用框架,對redux,react-router,redux-saga進(jìn)行了上層封裝。redux-saga是一個用于管理redux應(yīng)用異步操作的中間件,redux-saga通過創(chuàng)建sagas將所有異步操作邏輯收集在一個地方集中處理,可以用來代替redux-thunk中間件

  • 這意味著應(yīng)用的邏輯會存在兩個地方

    (1) reducer負(fù)責(zé)處理action的stage更新

    (2) sagas負(fù)責(zé)協(xié)調(diào)那些復(fù)雜或者異步的操作

  • sagas是通過generator函數(shù)來創(chuàng)建的

  • sagas可以被看作是在后臺運(yùn)行的進(jìn)程。sagas監(jiān)聽發(fā)起的action,然后決定基于這個action來做什么 (比如:是發(fā)起一個異步請求,還是發(fā)起其他的action到store,還是調(diào)用其他的sagas 等

  • 因?yàn)槭褂昧薵enerator函數(shù),redux-saga讓你可以用 同步的方式來寫異步代碼

React 項(xiàng)目引入 Dva

介紹

  • 項(xiàng)目情況:nw.js + react + redux + antd (客戶端應(yīng)用)
  • 目標(biāo): redux -> dva

準(zhǔn)備

  • 首先安裝 dva (目前版本 2.4.1)
    npm install dva —save

  • 參考官方文檔,改造項(xiàng)目為 dva 模式,在 src 下新增或修改入口文件 index.js

import dva from ‘dva’;
import createHistory from ‘history/createHashHistory’;

//1.Initialize
const app = dva({
history: createHistory(),
});

//2.Plugins
//app.use({});

//3.Model
//app.model(require(‘./models/app’).default);

//4.Router
app.router(require(‘./router’).default);

//5.Start
app.start(‘#root’);
  1. 然后在同級目錄下添加路由文件 router.js
import React from ‘react’;
import { Router, Route, Switch } from ‘dva/router’;

import App from ‘./containers/App’;
import{ Account, Articles, Channels, Editor } from ‘./containers’;
const { ArticleList } = Articles;

const RouterConfig = (({ history }) => (
	<Routerhistory={history}>
		<Switch>
			<Route path=‘/‘ component={App}>
				<IndexRoute component={Account} />
				<Route path=‘a(chǎn)ccount’ component={Account} exact />
				<Route path=‘a(chǎn)rticles’ component={ArticleList
 exact />
				<Route path=‘channels’ component={Channels} exact />
				<Route path=‘editor’ component={Editor} exact />
			</Route>
		</Switch>
	</Router>
));

export default RouterConfig;

說明:App 組件是整個頁面的容器組件,包含了 menu、header、footer 和一些公用部分,通過切換菜單匹配對應(yīng)路由,從而跳轉(zhuǎn)到各個子組件頁面,所以路由配置需要寫成嵌套形式。
更多路由配置,參考 react-router 官方文檔。

到這里,一個最簡單的 dva 模式已經(jīng)配置好了,只要在對應(yīng)組件里面設(shè)置 model、reducer 并在頁面中 connect ,就可以使用 dva 來管理狀態(tài)了。

問題解決

配置完成后重新啟動一下項(xiàng)目,查看頁面效果如下:
react dva指的是什么

發(fā)現(xiàn)容器部分渲染成功,但是子路由對應(yīng)的頁面(默認(rèn)是 Account)并沒有渲染,再看控制臺發(fā)現(xiàn)報(bào)錯了。

1、首先是這樣一個警告信息:

Warning: Please use `require(“history”).createHashHistory` instead of `require(“history/createHashHistory”)`. Support for the latter will be removed in the next major release.

在 dva 的 issure 里面查找到相同的問題,按照提示改成下面的格式就可以了。

const createHistory = require(‘history’).createBrowserHistory;

2、然后是一個路由問題的警告:

Warning: You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored

React-router 4.0 以上版本已經(jīng)不建議像下面這樣使用嵌套路由了

<Route path=‘/‘ component={App} >
	<Route path=‘a(chǎn)ccount’ component={Account} />
</Route>

對應(yīng)的,直接改成組件嵌套的形式(注意子路由的 path 要加上 /)就可以了。

<App>
	<Route path=‘/account’component={Account} />
</App>

改完之后然后重新,這兩個警告就沒有了。繼續(xù)看路由和渲染的問題。

3、按理來說,進(jìn)入應(yīng)用默認(rèn)會顯示 Account 組件(因?yàn)榕渲昧?IndexRoute),而且當(dāng)修改文件刷新頁面時候,頁面直接報(bào)錯了,如下:
react dva指的是什么

由此猜想是頁面路由的配置出了問題,查找了相關(guān)的資料(React填坑之react-router刷新后報(bào)錯解決方法),發(fā)現(xiàn)原來是 dva 中使用 BrowserHistory 的問題,所以直接把 BrowserHistory 改成 HashHistory
就可以了。

//const createHistory = require(‘history’).createBrowserHistory;
const createHistory = require(‘history’).createHashHistory;

重新啟動項(xiàng)目,嘗試切換路由,發(fā)現(xiàn)一切正常了。
react dva指的是什么

后面就可以在頁面中進(jìn)行 dva 的改造了,dva 中 model 、reducer 的用法都比較簡單,根據(jù)文檔進(jìn)行嘗試就可以了,這里便不一一敘述了。

總結(jié)

總結(jié)一下項(xiàng)目引入 dva 遇到的幾個問題。

  • import createHistory from ‘history/createHashHistory’; 寫法帶來 的警告

  • 使用 createHashHistory 導(dǎo)致的頁面刷新失敗的問題。

  • 嵌套路由配置的問題。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享react dva指的是什么內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

名稱欄目:reactdva指的是什么
文章URL:http://muchs.cn/article38/gecdpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、自適應(yīng)網(wǎng)站、用戶體驗(yàn)、網(wǎng)站策劃、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管