热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Taro3.2.8+Dva.js+taroui搭建微信小程序

前期准备微信开发者工具安装Node安装Taro使用npm或者yarn全局安装tarojscli#使用npm安装CLI$npminstall-gtarojscli#OR使用

前期准备


  1. 微信开发者工具
  2. 安装Node

安装 Taro

使用 npm 或者 yarn 全局安装 @tarojs/cli

# 使用 npm 安装 CLI
$ npm install -g @tarojs/cli# OR 使用 yarn 安装 CLI
$ yarn global add @tarojs/cli# OR 安装了 cnpm,使用 cnpm 安装 CLI
$ cnpm install -g @tarojs/cli

查看 Taro 全部版本信息
可以使用 npm info 查看 Taro 版本信息,在这里我们可以看到当前最新版本

npm info @tarojs/cli

项目初始化

使用命令创建模板项目:

$ taro init myApp

npm 5.2+ 也可在不全局安装的情况下使用 npx 创建模板项目:

$ npx @tarojs/cli init myApp

在这里插入图片描述
使用命令进行编译,编译好了之后,下载并打开微信开发者工具,然后选择项目根目录预览。

npm run dev:weapp

在这里插入图片描述


Dva 配置

安装 react-redux ,大部分文档说安装tarojs/redux,但是这个包在taro3.x已经消失了,所以这里我们安装 react-redux

cnpm i --save react-redux

安装dva-coredva-loading
dva-core 封装了reduxredux-sage的一个插件
dva-loading 管理页面的loading状态

cnpm i --save dva-core dva-loading

dva需要挂载所有的models,所以在src目录创建models目录,并在models目录下的index.js返回项目中创建的所有model

// src/models/index.js
// dva需要挂载所有的models
import users from '../pages/index/model'export default [users, // users为项目中创建的model
];

model 的结构如下:

// src/pages/index/modelexport default {namespace: 'users',state: {title: 'Hello World'},effects: {},reducers: {save(state, { payload }) {return { ...state, ...payload };},},
};

在src目录下创建utils目录,并在utils目录里创建dva.js文件

// src/dva.js
import { create } from 'dva-core';
import createLoading from 'dva-loading';let app;
let store;
let dispatch;function createApp(opt){// 创建应用,返回dva实例app = create(opt);// 配置插件 createLoading是解决异步加载的过渡问题app.use(createLoading({}));if(!global.registered){// 注册modelopt.models.forEach(model => app.model(model));}global.registered = true;// 启动应用app.start();store = app._store;app.getStore = () => store;dispatch = store.dispatch;app.dispatch = dispatch;return app;
}
export default {createApp,getDispatch: () => {return app.dispatch;}
}

在入口文件 app.js 里使用 dva.js 返回的方法创建一个 app 获取 store ,并将 store 挂载到Provider 容器里面

// src/app.jsimport { Component } from 'react'
import dva from './utils/dva'
import { Provider } from 'react-redux'
import models from './models'
import './app.less'const dvaApp = dva.createApp({initialState: {},models
})
const store = dvaApp.getStore();
class App extends Component {componentDidMount () {}componentDidShow () {}componentDidHide () {}componentDidCatchError () {}// this.props.children 是将要会渲染的页面render () {return <Provider store&#61;{store}>{this.props.children}</Provider>}
}export default App

以上&#xff0c;完成 dva 配置

验证配置的 dva 是否可用&#xff0c;在 pages/index/index.jsx 使用 connect 连接 model和组件&#xff0c;并打印this.props

// pages/index/index.jsximport { Component } from &#39;react&#39;
import { View, Text } from &#39;&#64;tarojs/components&#39;
import { connect } from &#39;react-redux&#39;
import &#39;./index.less&#39;&#64;connect(({users})&#61;>({users
}))
export default class Index extends Component {componentWillMount () { }componentDidMount () { }componentWillUnmount () { }componentDidShow () { }componentDidHide () { }render () {console.log(this.props);return (<View className&#61;&#39;index&#39;><Text>Hello ChenMengjie!</Text></View>)}
}

this.props里面若存在model里面的state&#xff0c;则连接成功&#xff01;


引入taro-ui

安装 taro-ui

cnpm i --save taro-ui&#64;3.0.0-alpha.3

引入组件样式的三种方式:


  • 全局引入样式(JS中)&#xff0c;在入口文件引入所有样式&#xff1a;

import &#39;taro-ui/dist/style/index.scss&#39;

  • 全局引入样式(CSS中)

&#64;import "~taro-ui/dist/style/index.scss";

  • 按需引入&#xff0c;在页面样式或全局样式中 import 需要的组件样式

&#64;import "~taro-ui/dist/style/components/button.scss";

// src/app.jsimport { Component } from &#39;react&#39;
import { Provider } from &#39;react-redux&#39;
import &#39;taro-ui/dist/style/index.scss&#39;
import dva from &#39;./utils/dva&#39;
import models from &#39;./models&#39;
import &#39;./app.less&#39;const dvaApp &#61; dva.createApp({initialState: {},models
})
const store &#61; dvaApp.getStore();
class App extends Component {componentDidMount () {}componentDidShow () {}componentDidHide () {}componentDidCatchError () {}// this.props.children 是将要会渲染的页面render () {return <Provider store&#61;{store}>{this.props.children}</Provider>}
}export default App

// src/pages/index/index.jsximport { Component } from &#39;react&#39;
import { View, Text } from &#39;&#64;tarojs/components&#39;
import { AtTabBar } from &#39;taro-ui&#39;
import { connect } from &#39;react-redux&#39;
import &#39;./index.less&#39;&#64;connect(({users})&#61;>({users
}))
class Index extends Component {componentWillMount () { }componentDidMount () { }componentWillUnmount () { }componentDidShow () { }componentDidHide () { }render () {console.log(this.props);return (<View className&#61;&#39;index&#39;><Text>Hello world!</Text><AtTabBar fixedtabList&#61;{[{title: &#39;首页&#39;, iconType: &#39;home&#39;},{title: &#39;我的&#39;, iconType: &#39;user&#39;}]}/></View>)}
}
export default Index;

在这里插入图片描述


参考文档

Taro 官网


推荐阅读
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • PatchODAX8: ... [详细]
author-avatar
亮铮铮安神_453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有