## 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. Codeforces Round #355 (Div. 2)-B. Vanya and Food Processor,纯考思路~~

    B. Vanya and Food Processor time limit per test 1 second memory limit per test 256 megabytes input s ...

  2. hdu 1787

    #include<stdio.h> #include<math.h> int huzhi(int n) {//欧拉函数公式 int i,j=n; for(i=2;i<(i ...

  3. Flask(2):登陆验证

    装饰器补充: import functools def auth(func): @functools.wraps(func) # 作用:把原函数的原信息封装到 inner 中 def inner(*a ...

  4. windows开启远程

    windows开启远程桌面超级简单,跟linux相比太简单了. 补充:有瑕疵,应该是远程中的远程桌面属性打钩,但是W8.1没有这个选项,W7可以,其次创建一个管理员账户,身份是管理员,不是标准用户,要 ...

  5. Linux下汇编语言学习笔记63 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  6. springboot技术

      一 我们为什么要用SpringBoot? 1. SpringBoot核心功能 SpringBoot的核心最足要的功能是自动配置,简单说下springBoot,springboot可以替代额xml配 ...

  7. JDBC的流数据

    以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/streaming-data.html: PreparedStatement对象必须具备使用输入和输出流 ...

  8. DOM对象与jquery对象的互相转换

    一開始总是对DOM对象和jQuery对象搞不清楚.如今对此做一下总结: DOM 对象:文档对象模型.每一份DOM都能够看作一棵树.像ul,li ol  dl  p  h1  等等都是DOM元素节点.能 ...

  9. zabbix学习系列之配置邮件告警

    整体思路是:添加监控项-->配置触发器(达到设定的阈值就触发)-->配置动作(将某个触发器绑定到某个动作,达到某个阈值,触发器触发的时候,通过邮件发送告警信息给某个用户) 配置触发器 创建 ...

  10. go-import下划线的作用

    原文:http://studygolang.com/articles/4356 ------------------------------------------------------------ ...