## taro.js & dva 脚手架

### 启动
npm install -g @tarojs/cli // 全局安装taro-cli
npm i
npm run dev:weapp // 启动
### [重要!关于taro开发的一些注意事项](https://nervjs.github.io/taro/docs/best-practice.html)
- 不能在包含 JSX 元素的 map 循环中使用 if 表达式
- 不能使用 Array#map 之外的方法操作 JSX 数组
- 不能在 JSX 参数中使用匿名函数
- 暂不支持在 render() 之外的方法定义 JSX
- 不能在 JSX 参数中使用对象展开符
- 不支持无状态组件
- 组件上绑定方法只支持this.xxx方式
> handleClick = () => {} <Cat onClick={this.handleClick} />
- 父组件要往子组件传递函数,属性名必须以 on 开头
- 不要在组件中打印this.props.children和传入的函数
- 不要在 state 与 props 上用同名的字段,因为这些被字段在微信小程序中都会挂在 data 上。
- 可以使用 this.$preload 函数进行页面跳转传参[文档链接](https://nervjs.github.io/taro/docs/best-practice.html#%E5%9C%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%B8%AD-%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8-this-preload-%E5%87%BD%E6%95%B0%E8%BF%9B%E8%A1%8C%E9%A1%B5%E9%9D%A2%E8%B7%B3%E8%BD%AC%E4%BC%A0%E5%8F%82)
- render中的jsx,不支持先声明变量,再赋值,如:
 
const renderA = <View>1</View>
const renderB = <View>2</View>
const renderC = <View>3</View>
let content
if (current === 0) content = renderA
else if (current === 1) content = renderB
else if (current === 2) content = renderC
- render中的jsx,不支持函数组件,如:
 
const renderContent = () => {
return (
<View>1</View>
)
}
return (
<View className='index'>
<View className='filter-content'>
{renderContent()}
</View>
</View>
)
> 该特性taro v1.3有计划支持,[issues1869](https://github.com/NervJS/taro/issues/1869#issuecomment-452614768)[issues157](https://github.com/NervJS/taro/issues/157)
- render中的jsx,不支持数组或对象形式写jsx,如:
const renderA = [
<View>1</View>,
<View>2</View>,
<View>3</View>,
]
const renderB = {
'a': <View>1</View>,
'b': <View>2</View>,
'c': <View>3</View>,
}
const i = 0 // 1 or 2
const j = 'a' // 'b' or 'c'
return (
<View>renderA[i]</View>
<View>renderB[j]</View>
)
 
- 高阶组件支持有限,无法劫持render方法,但可以劫持其他周期,如componentWillMount。
> 使用可参考taro-redux实现[taro-redux](https://github.com/NervJS/taro/tree/master/packages/taro-redux)
 
> [issues1155](https://github.com/NervJS/taro/issues/1155)
[issues465](https://github.com/NervJS/taro/issues/465)
### 可参考项目:
- [仿知乎](https://github.com/zuoge85/taro-dva)
- [awesome-taro](https://github.com/NervJS/awesome-taro)
### 其他技术栈学习
- [dva](https://github.com/dvajs/dva)
- [tarojs](https://github.com/NervJS/taro)
- [Typescript](https://www.tslang.cn/docs/home.html)
- [关于effects的文档](https://redux-saga-in-chinese.js.org/docs/basics/DeclarativeEffects.html)
- call : 调用异步函数,通常用于请求接口
- put : 用于dispatch actions
- select: 访问其他model, 获取state
- [关于整个model的文档](https://dvajs.com/api/#namespace)
- [taro组件库](https://taro-ui.aotu.io/#/docs/quickstart)
- [classnames](https://github.com/JedWatson/classnames)

taro.js & dva 脚手架搭建及常见问题的更多相关文章

  1. 从零开始搭建一个vue.js的脚手架

    在谷歌工作的时候,我们要做很多界面的原型,要求快速上手,灵活运用,当时用的一些现有框架,比如angular,太笨重了——尤雨溪(Vue.js 作者) vue.js是现在一个很火的前端框架,官网描述其简 ...

  2. 【每天学一点-04】使用脚手架搭建 React+TypeScript+umi.js+Antd 项目

    一.使用脚手架搭建项目框架 1.首先使用脚手架搭建React项目(React+TypeScript+Umi.js) 在控制台输入命令:yarn create @umijs/umi-app 2.引入An ...

  3. windows下vue.js开发环境搭建教程

    这篇文章主要为大家详细介绍了windows下vue.js开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中 ...

  4. vue.js开发环境搭建以及创建一个vue实例

    Vue.js 是一套构建用户界面的渐进式框架.Vue 只关注视图层, 采用自底向上增量开发的设计.Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. 在使用 vue.js ...

  5. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  6. 使用nuxt.js官方脚手架构建项目时ES6编译问题SyntaxError: Unexpected token import

    用nuxt集成koa2做vue后台,官方自带脚手架搭建的koa2仍是ES5语法,在构建koa2时默认的nodemon是没有使用babel编译的, 所以首先需要在启动命令后加上--exec babel- ...

  7. 让vue-cli脚手架搭建的项目可以处理vue文件中postcss语法

    图中&属于postcss的语法,这样书写样式可以清楚的看出选择器之前的层级关系,非常好用. 在利用vue-cli脚手架搭建的项目中如果不配置是不支持这种写法的,这样写不会报错,但是样式不生效. ...

  8. 用vue-cli脚手架搭建一个仿网易云音乐的全家桶vue项目

    一,vue-cli环境搭建 1,全局安装webpack npm install webpack -g 2,安装vue脚手架 npm install vue-cli -g 3,新建一个新的project ...

  9. vue-cli脚手架搭建项目简单入门一

    搭建系统: Windows系统 简单了解Node.js.npm,安装Node.js,下载网址:http://nodejs.cn/download/ 查看node,npm安装成功与否.打开cmd命令行, ...

随机推荐

  1. 添物不花钱学JavaEE(基础篇)-综述

    JavaEE由一堆基础标准组成.JavaEE开发一般需要如下工具和掌握如下内容: Java环境 Eclipse或其他开发工具 Tomcat容器或类似软件 Jsp/Servlet/Web/JDBC的掌握 ...

  2. [K/3Cloud] 代码中设置某个字段必录

    Control ctl = this.GetControl(fieldKey); FieldEditor editCtl = ctl as FieldEditor; if (editCtl != nu ...

  3. UVA 1995 I can guess the structer

    模 拟 /*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> #inclu ...

  4. linux 命令练习 2018-08-27

    linux 命令练习 2018-08-27 uname  显示系统名字 [test@localhost ~]$ uname Linux uname -a   即列出linux的内核版本号 [test@ ...

  5. [运维]ELK实现日志监控告警

    https://blog.csdn.net/yeweiouyang/article/details/54948846

  6. POJ 2411_Mondriaan's Dream

    题意: 用1*2和2*1的方块将给定长宽的矩形填满.问有多少种放法,对称的算两种. 分析: 状态压缩dp 首先用0表示前一行没有竖块占用这个位置,而1表示该位置和他上方的位置放了一个竖块,从而压缩状态 ...

  7. Ubuntu 16.04粘贴板增强工具Diodon

    相比Parcellite(http://www.cnblogs.com/EasonJim/p/7119308.html),Diodon可以支持图片. 安装: sudo add-apt-reposito ...

  8. JSP的安全性

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/security.html: JavaServer Pages和Servlets有几种可用的机制可以使We ...

  9. ESG操作指南

    ESG使用指南:1.ESG操作文档网站:ESG有个网站,是专门的操作文档网站,因为ESG三个环境,流程各不一样.地址:http://10.20.12.90:20567/esg-help-doc/2.E ...

  10. 重置网络命令win7

    开始→运行→输入:CMD 点击确定(或按回车键),打开命令提示符窗口. 在命令提示符中输入:netsh winsock reset (按回车键执行命令) 稍后,会有成功的提示:成功地重置Winsock ...