摘要:项目地址项目预览登录流负责全局的登录状态管理。总体思想所有的组件都尽量是所有的状态组件一般都是路由组件。所有的分发都交给了路由组件来完成。数据的获取有两种方式。一种是官方推荐的使用在订阅数据源。
项目地址
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);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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...
阅读 1267·2021-11-04 16:09
阅读 3330·2021-10-19 11:45
阅读 2358·2021-10-11 10:59
阅读 982·2021-09-23 11:21
阅读 2740·2021-09-22 10:54
阅读 1105·2019-08-30 15:53
阅读 2575·2019-08-30 15:53
阅读 3451·2019-08-30 12:57