用Taro写一个微信小程序(三)—— 配置dva
一、关于dva
dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。
具体内容可以看官网。
二、在taro中配置dva
1、安装如下依赖
npm install --save dva-core dva-loading
npm install --save redux react-redux redux-thunk redux-logger
2、在src目录下创建utils目录,并在utils目录里创建dva.js文件
src/utils/dva.js
import { create } from 'dva-core';
import createLoading from 'dva-loading';
let app;
let store;
let dispatch;
function createApp(opt) {
// redux日志
app = create(opt);
app.use(createLoading({}));
// 注入model
if (!global.registered) opt.models.forEach(model => app.model(model));
global.registered = true;
app.start();
// 设置store
store = app._store;
app.getStore = () => store;
app.use({
onError(err) {
console.log(err);
}
})
// 设置dispatch
dispatch = store.dispatch;
app.dispatch = dispatch;
return app;
}
export default {
createApp,
getDispatch() {
return app.dispatch;
}
}
3、在src目录下创建models目录,并在models目录里创建index.js文件
src/models/index.js(index.js返回项目中创建的所有model)
import common from './common'; export default [common];
src/models/common.js (common是创建的一个model)
export default {
namespace: 'common',
state: {
name: '麦豇豆',
},
effects: {},
reducers: {
save(state, { payload }) {
return { ...state, ...payload };
},
},
};
4、在入口文件app.js中创建一个app获取store,并将store挂载到Provider容器里面
src/app.js
import { Component } from 'react'
import { Provider } from 'react-redux'
import './app.scss'
import dva from './utils/dva'
import models from './models/index'
const dvaApp = dva.createApp({
initialState: {},
models,
});
const store = dvaApp.getStore();
class App extends Component {
// this.props.children 是将要会渲染的页面
render () {
return <Provider store={store}>
{this.props.children}
</Provider>
}
}
export default App
这就配置好啦~【撒花】
三、验证dva是否配置成功
在上面我已经创建了一个model,里面存了name,下面我们就使用connect来连接这个model。
src/pages/home/index.js
import { Component } from 'react'
import { View, Text } from '@tarojs/components'
import { connect } from 'react-redux'
import './index.scss'
class Index extends Component {
componentDidMount () {
console.log('props', this.props)
}
render () {
const { name } = this.props
return (
<View className='home'>
<Text className='title'>{name}</Text>
</View>
)
}
}
export default connect(({ common }) => ({ ...common }))(Index);
打印this.props,可以取到model里面保存的state,页面也可以正确展示出name。


END------------------------
平时则放荡治游,考试则熟读讲义,不问学问之有无,惟争分数之多寡;试验既终,书籍束之高阁,毫不过问,敷衍三四年,潦草塞责,文凭到手,即可借此活动于社会,岂非与求学初衷大相背驰乎?光阴虚度,学问毫无,是自误也。
用Taro写一个微信小程序(三)—— 配置dva的更多相关文章
- 用Taro写一个微信小程序(一)——开始一个项目
一.Taro简介 1.名字由来 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼. 2.taro是什么 Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vu ...
- 用Taro写一个微信小程序(二)——配置目录别名
配置别名可以方便书写代码引用路径,让代码更整洁. 官方文档可参考https://nervjs.github.io/taro/docs/config-detail#alias 一.在config/ind ...
- 微信小程序——手把手教你写一个微信小程序
前言 微信小程序年前的跳一跳确实是火了一把,然后呢一直没有时间去实践项目,一直想搞但是工作上不需要所以,嗯嗯嗯嗯嗯emmmmm..... 需求 小程序语音识别,全景图片观看,登录授权,获取个人基本信息 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
- 开发一个微信小程序教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 开发一个微信小程序实例教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 撸了一个微信小程序项目
学会一项开发技能最快的步骤就是:准备,开火,瞄准.最慢的就是:准备,瞄准,瞄准,瞄准-- 因为微信小程序比较简单,直接开撸就行,千万别瞄准. 于是乎,趁着今天上午空气质量不错,撸了一个小程序,放在了男 ...
- 用Taro做个微信小程序Todo, 小白工作记录
微信小程序框架: Taro 做微信小程序的框架, 几个比较主流的: 官方的WePY: https://tencent.github.io/wepy/document.html#/ 美团的mpvue: ...
随机推荐
- The 2014 ACM-ICPC Asia Mudanjiang Regional First Round J
题意: 是个模拟题,就是给你一个字符串,问你他是不是"ABABA" 或者"ABABCAB"的模式,ABC是三个长度不为0且不同的串. 思路: ...
- hdu4908 中位数子串
题意: 给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列. 思路: 首先分四中简单的情况求 (1) 就是只有他自己的那种情况 那么sum+1 ...
- 用 vitePress 快速创建一个文档项目
其实开发一个项目最需要的就是操作文档,文档的质量决定了项目的开发流程,开发规范等等. 对于前端框架来说,文档最友好的还是vue,不仅是中国人的框架,而且文档支持了中文.仔细查看 Vue 的官方文档,还 ...
- 攻防世界Web刷题记录(进阶区)
攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...
- Arduino+DS18b20+OLED Display
DS18b20获取到温度数值保存到变量中,然后和天气图标还有滚动字幕一起发送到OLED 屏幕上显示 需要用到的库均可在Arduino库管理器下载. 电路图: 图中屏幕接线已在代码中写出,温度传感器da ...
- 表单模块 layui-form
使用 layui针对各种表单元素做了比较全面的Ui支持,在Ui渲染只要求一点.,在表单体所在父元素加上class="layui-form" 监听事件 提交按钮监听,注意需要加·la ...
- [2021BUAA软工_助教博客]作业成绩汇总
作业及成绩 作业链接 成绩链接 个人阅读作业#1 个人阅读作业#1_成绩 个人阅读作业#2 个人阅读作业#2_成绩 结对项目-第一阶段 结对项目-第一阶段_成绩 结对项目-第二阶段 结对项目-第二阶段 ...
- 面试侃集合 | LinkedBlockingQueue篇
面试官:好了,聊完了ArrayBlockingQueue,我们接着说说LinkedBlockingQueue吧 Hydra:还真是不给人喘口气的机会,LinkedBlockingQueue是一个基于链 ...
- linux基本命令随笔
cd(change directory) 不跟参数,直接进入当前登录用户的家目录 . 代表当前目录 .. 代表上级目录 ls(list) -l 显示文件详细信息 -a 显示隐藏文件 -S 以文件大小排 ...
- g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中的影响力,g77 可能是应用最广的Fortran编译器。 在 GCC 4.0 之前,g77 是 GCC 的一部分,但现在,g77 已经停止开发。
GFORTRAN 维基百科,自由的百科全书 跳到导航 跳到搜索 此条目需要扩充. (2018年11月2日)请协助改善这篇条目,更进一步的信息可能会在讨论页或扩充请求中找到.请在扩充条目后将此模 ...