摘要:項目地址項目預覽登錄流負責全局的登錄狀態管理。總體思想所有的組件都盡量是所有的狀態組件一般都是路由組件。所有的分發都交給了路由組件來完成。數據的獲取有兩種方式。一種是官方推薦的使用在訂閱數據源。
項目地址
https://github.com/HeskeyBaoz...
項目預覽models/app負責全局的登錄狀態管理。
在路由控制中,使用react-router的onEnter鉤子保證在進入需要授權的頁面中登錄狀態是保持的。
function requireAuth(nextState, replace, callback) { app._store.dispatch({ type: "app/enterAuth", payload: {}, onComplete: callback // enter the component }); } function* enterAuth({payload, onComplete}, {put, take}) { yield [put({type: "checkToken"}), put({type: "queryUser"})]; yield [take("app/hasToken"), take("app/queryUserSuccess")]; // promise the logged state onComplete(); }總體思想
所有的組件都盡量是stateless, 所有的狀態connect組件一般都是路由組件。所有的分發dispatch都交給了路由組件來完成。
這樣我可以保證我可以復用一些Dumb組件,比如PostsListBody這個組件,既可以在文章列表頁面使用,也可以在用戶頁面查看自己的文章列表使用。
數據的獲取有兩種方式。
一種是dva.js官方推薦的, 使用在models/posts
"訂閱"數據源。這封裝了react-redux-router增強的history。
這樣可以監聽路由的變化,比如說下面在進入/posts時,會發起一個獲取文章列表的action.
app.model({ subscriptions: { setup: function ({history, dispatch}) { history.listen(location => { if (pathToRegExp("/posts").exec(location.pathname)) { dispatch({ type: "fetchPostsList", payload: {pageInfo: {limit: 5, page: 1}} }); } }); } } });
還有一種是進入一些頁面時,要保證一些數據已經在state中了。這時我還是使用了react-router的onEnter鉤子。
比如說在進入文章詳細頁面時,需要知道文章的基本元信息,標題作者等等。等到元信息加載完,再進入頁面。
語法層面上上,多虧了有saga的各種effects創建器。可以很爽地寫出各種異步代碼
function requirePostPrepared(nextState, replace, callback) { app._store.dispatch({ type: "post_detail/initializePostDetail", payload: {post_id: nextState.params.post_id}, onComplete: callback }); } function* initializePostDetail({payload, onComplete}, {put, call}) { yield put({type: "clear"}); const {post_id} = payload; const {data} = yield call(fetchPostInfo, {post_id}); if (data) { yield put({ type: "saveInitialPostDetailInfo", payload: {postInfo: data} }); onComplete(); // enter the component // then fetch the data yield [ put({type: "fetchPostContent"}), put({type: "fetchPostComments"}) ]; } }文章列表
使用normalizr將獲取到的文章數組扁平化,方便后續修改visible可見狀態等。
原理如圖:
這樣在獲取數據源展示數據時,即可使用一條語句
const dataSource = postsList.map(post_id => postsById[post_id]).filter(post => post);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81422.html
摘要:介紹首先是一個基于和的數據流方案,然后為了簡化開發體驗,還額外內置了和,所以也可以理解為一個輕量級的應用框架。 介紹(dva.js) dva 首先是一個基于 redux 和 redux-saga 的數據流方案,然后為了簡化開發體驗,dva 還額外內置了 react-router 和 fetch,所以也可以理解為一個輕量級的應用框架。 特性 易學易用,僅有 6 個 api,對 redu...
摘要:去年年底自己搭了一個在移動端的開發框架,感覺體驗不是很好。路由懶加載首頁終于寫完了,以上這些就是我在移動端體驗優化的實戰。去年年底自己搭了一個vue在移動端的開發框架,感覺體驗不是很好。上個星期又要做移動端的項目了。所以我花了兩天時間對之前的那個開發框架做了以下優化 自定義vuex-plugins-loading 路由切換動畫 + keep alive 動態管理緩存組件 better-sc...
摘要:高顏值好用易擴展的微信小程序庫,有贊。一套高質量的微信小程序組件庫。用和搭建的一個通用管理后臺基于實現的后臺管理系統模板一個后臺管理系統模板是一套組件化框架,支持定制主題,主要服務于前臺及中后臺產品。基于后臺管理系統。 快來Star,在這里哦Awesome UIKit。 showImg(https://segmentfault.com/img/remote/14600000059942...
摘要:高顏值好用易擴展的微信小程序庫,有贊。一套高質量的微信小程序組件庫。用和搭建的一個通用管理后臺基于實現的后臺管理系統模板一個后臺管理系統模板是一套組件化框架,支持定制主題,主要服務于前臺及中后臺產品。基于后臺管理系統。 快來Star,在這里哦Awesome UIKit。 showImg(https://segmentfault.com/img/remote/14600000059942...
閱讀 1297·2021-11-04 16:09
閱讀 3484·2021-10-19 11:45
閱讀 2396·2021-10-11 10:59
閱讀 1010·2021-09-23 11:21
閱讀 2762·2021-09-22 10:54
閱讀 1129·2019-08-30 15:53
閱讀 2600·2019-08-30 15:53
閱讀 3477·2019-08-30 12:57