用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: ... 
随机推荐
- 易酷CMS2.5本地文件包含漏洞复现
			易酷CMS是一款影片播放CMS.该CMS2.5版本存在本地文件包含漏洞.我们可以利用这个漏洞,让其包含日志文件,然后再利用报错信息将一句话木马写入日志中.然后利用文件包含漏洞包含该日志文件,再用菜刀连 ... 
- Winrar漏洞复现(CVE-2018-20250)
			本文讲的是Winrar漏洞利用脚本的使用方法,至于Winrar漏洞的原理,请移步--> Winrar目录穿越漏洞复现 本次利用脚本出处--> https://github.com/back ... 
- js中return;、return true、return false;区别
			一.返回控制与函数结果 语法为:return 表达式 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制 无函数结果,语法为:return; 在大多数情况下,为事件处理函数返 ... 
- android手势识别
			一.简单手势识别: 简单手势识别分为以下几个步骤: 1.手指触碰屏幕时,触发MotionEvent事件: 2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该Moti ... 
- linux中定时运行php(每分钟执行一次为例)
			注:使用Crontab定时执行php脚本文件 1. 安装crontab yum install crontabs 说明:/sbin/service crond start //启动服务/sbin/se ... 
- 二、postman断言及正则表达式取值
			postman老式断言与新式断言总结:本文以微信开发者文档为例 断言处如图所示 一.老式断言 老式断言总结:var variables相当于代码中定义的变量,test['']=true;相当于pyth ... 
- springboot 项目中css js 等静态资源无法访问的问题
			目录 问题场景 问题分析 问题解决 问题场景 今天在开发一个springboot 项目的时候突然发现 css js 等静态资源竟然都报404找不到,折腾了好久终于把问题都解决了,决定写篇博客,纪录总结 ... 
- 从 demo 到生产 - 手把手写出实战需求的 Flink 广播程序
			Flink 广播变量在实时处理程序中扮演着很重要的角色,适当的使用广播变量会大大提升程序处理效率. 本文从简单的 demo 场景出发,引入生产中实际的需求并提出思路与部分示例代码,应对一般需求应该没有 ... 
- MySQL连接本地服务器
			1.打开"控制面板" 2.搜索"管理工具",并点击第一个"管理工具" 3.双击"服务" 4.找到"MySQL& ... 
- Pytorch系列:(六)自然语言处理NLP
			这篇文章主要介绍Pytorch中常用的几个循环神经网络模型,包括RNN,LSTM,GRU,以及其他相关知识点. nn.Embedding 在使用各种NLP模型之前,需要将单词进行向量化,其中,pyto ... 
