一、什么是Taro

Taro是凹凸实验室研发的一套遵循React语法规范的多端开发的解决方案。使用Taro,可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动小程序、H5、React-Native 等)运行的代码。

Taro 遵循 React 语法规范,它采用与 React 一致的组件化思想,组件生命周期与 React 保持一致,同时支持使用 JSX 语法,让代码具有更丰富的表现力,使用 Taro 进行开发可以获得和 React 一致的开发体验。

Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性

✅ 支持使用 npm/yarn 安装管理第三方依赖

✅ 支持使用 ES7/ES8 甚至更新的 ES 规范,一切都可自行配置

✅ 支持使用 CSS 预编译器,例如 Sass 等

✅ 支持使用 Redux 进行状态管理

✅ 支持使用 MobX 进行状态管理

✅ 小程序 API 优化,异步 API Promise 化等等

Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 Taro 代码可以支持转换到 微信/百度/支付宝/字节跳动小程序 、 H5 端 以及 移动端(React Native)。

二、什么是Apollo

Apollo是民生银行自主研发的一个基于redux和redux-thunk的数据流方案,为了提高开发体验,Apollo还内置了react,react-router和react-redux,也可以理解为一个轻量级框架。简单的说,Apollo就是对react,react-router,redux,redux-thunk等的一层封装,使开发者可以对react和redux的使用有更好的体验。

三、如何在Taro中使用Apollo

首先,我们安装Taro的开发工具@tarojs/cli,生成一个Taro的项目,怎么安装,Taro官网都写得很清楚,大家可以去官网查看,这里就不再详述。Taro官网地址:taro.aotu.io/

第二步在src-utils文件夹下新建一个apollo.js,输出一个方法,通过此方法注入model并输出,代码如下:

import Apollo from 'apollo-core'let app;export default function initApp(opt) {app = Apollo({})opt.models.forEach(model => app.model(model));return app.getStore();
}
复制代码

第三步,我们在src文件夹下新建models文件夹,新建index.js文件,把我们的所有模块的model输出,代码如下:

import login from '../pages/login/model'
import home from '../pages/home/model'
import detail from '../pages/detail/model'
import user from '../pages/user/model'
import address from '../pages/address/model'
import addAddress from '../pages/addAddress/model'
import cart from '../pages/cart/model'
import order from '../pages/order/model'export default [login, home, detail, user, address, addAddress, cart, order];
复制代码

第四步,我们在app.js文件中导入所有的model和对apollo的初始化,代码如下:

import initApp from './utils/apollo'
import models from './models'
复制代码
const store = initApp({models: models,
})
复制代码
<Provider store={store}><Index />
</Provider>
复制代码

这样我们就把Apollo集成进了Taro中,开发者就可以按照以前在apollo框架中的方法来开发微信小程序了。

下面,介绍一下每个模块的目录结构

我们的开发代码主要都在src文件夹下,所以这里我主要讲下src的目录结构

components放的是我们分装的木偶组件,也就是可以公用的一些组件。

images放的是我们的图片文件

models就是存放所有的model文件

pages就是我们的页面文件

styles就是我们的公用样式文件

utils就是我们使用的一些插件和封装的一些函数

下面我再说下pages里面每个模块的结构

index.js就是我们在apollo开发过程中的page层,也就是和model的交互层

indexView就是我们在apollo开发过程中的view层,也就是不做数据交互,是展示层

index.scss就是这个模块的样式文件

model.js就是这个模块的model

client.js就是我们输出的和调用后端接口的函数

config.js就是我们定义的一些在这个模块使用的常量

目录结构介绍完了,我们最后说下封装和后端的交互request,在这里我们用的是Taro的api,Taro.request

我们先在utils文件夹中新建request.js,直接上代码:

import Taro from '@tarojs/taro'
import config from './config'const request_data = {platform: 'wap',rent_mode: 2,
}export default (options = { method: 'GET', data: {}, notShowLoading: false }) => {if(!options.notShowLoading) {Taro.showLoading({title: '加载中...'})}if(!config.noConcel) {console.log('请求参数', options.data)}return Taro.request({url: config.baseUrl + options.url,data: {...request_data,...options.data,},method: options.method.toUpperCase(),header: {'Content-Type': 'application/json'}}).then(res => {Taro.hideLoading()const { statusCode, data } = res;if(statusCode >= 200 && statusCode < 300) {if(!config.noConcel) {console.log('接口响应', res.data)}if(data.status !== 'ok') {Taro.showToast({title: res.data.error.message || res.data.error.code,icon: 'none',mask: true,})}return data;} else {throw new Error(`网络请求错误,状态码${statusCode}`)}})
}复制代码

这样我们就实现了在Taro中用以前Apollo的写法来开发了,开发体验和用Aopllo一模一样。

四、在用Taro开发小程序过程中遇到的一些问题和解决方法

我下面要说的很多问题在Taro官网的文档中都有说明,大家在开发之前还是要好好仔细阅读一遍Taro文档,我在这里说一下可以给大家提前预防一下

1.小程序的后端服务器需要在微信公众号后台管理中配置,否则不可用

2.小程序必须使用HTTPS/WSS发起网络请求 developers.weixin.qq.com/miniprogram…

3.不能在jsx参数中使用对象展开符

render () {return (<OrderView { ...this.props }/>)}
复制代码

上面这种写法会导致Taro编译错误 可以写成下面这样

render () {return (<OrderView order={this.props.order} onSubmit={this.props.submit}/>)}
复制代码

4.Taro中是不支持无状态组件的,也就是不支持纯函数的写法

5.设置小程序的编译页面如下

6.不能使用 Array#map 之外的方法操作 JSX 数组

7.View的onClick事件是可以直接拿到event的,不用再把item传进去

当然想要传也是可以的,可以写成

onClick={() => this.handleClick(item)}
复制代码

8.小程序的微信开发者工具输入框焦点很难触发

在微信开发者工具上,触发焦点,很费劲,这是微信开发者工具的bug

9.Taro.navigateBack()返回是不会刷新页面的,走的是componentDidShow(),用的时候要注意页面返回时数据刷新的问题。

10.对于跳转tabbar的情况要分环境,如果是小程序用switchTab这个api,如果是h5用navigateTo这个api。

11.初始化页面发请求调用mapDispatchToProps里面的函数应写在componentDidMount中而不要写在componentWillMount中,小程序没问题,在h5中componentWillMount拿不到this.props。

12.表单数据项建议用taro-ui封装的组件,原生的Input的onChange事件在真机不会触发,只有离开焦点才会触发,用taro-ui封装的组件也就可以直接setState了。

13.ScrollView标签会和Taro的上拉刷新的页面事件处理函数onReachBottom冲突,然后onReachBottom会失效,如果想两端适配的话就不要用onReachBottom了,用ScrollView标签来实现就行了。如果只是做微信小程序,用onReachBottom就行了。用了scrollView,小程序的onReachBottom就不起作用了。

14.做完一个功能就要在真机上测试下,微信开发者工具不靠谱,在微信开发者工具上没问题,放到真机上就有问题了,比如原生的input的onchange事件在真机上触发就有延迟,在微信开发者工具上没问题,一定不能等全部功能做完了再在真机上测试。切记切记。

结语

本文大致讲解了Taro,Apollo的概念以及把Apollo集成到Taro中的使用实践和用Taro开发过程中所遇到的一些问题和解决方法。当然这里不可能把所有的问题都列出来,每个开发者在开发过程中遇到的问题也不尽相同,这里只是提供一个思路,分享出自己在开发过程中的心得。在此过程中,完成了一个线上购物demo,地址为 coding.net/u/longbg/p/… 有兴趣的朋友可以下载下来看看,有什么问题我们也可以互相讨论,这样我们才能一起进步。最后,谢谢大家的阅读!

转载于:https://juejin.im/post/5cc1200ee51d456e3e7a3b8f

浅谈Taro和Apollo在开发过程中的实践相关推荐

  1. 数学在计算机科学上的应用文献,浅谈数学在计算机科学及应用中的作用

    论文编号:SXJY040论文字数:5690,页数:06 浅谈数学在计算机科学及应用中的作用 [摘要]:数学作为伴随人类历史发展长期积累的智慧结晶,是学习和运用科学技术的语言,代表着人类智慧的最高成就. ...

  2. 计算机科学技术的教育应用论文,浅谈计算机科学技术在计算机教学中的应用论文...

    计算机科学,研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构.程序系统(即软件).人工智能以及计算本身的性质和问题的学科.计算机科学是一门包含各种各样与计算和信息处理相关主题的系统学科, ...

  3. 工作中应用计算机,浅谈计算机在我国计工作中的应用与发展.doc

    浅谈计算机在我国计工作中的应用与发展 <计算机的过去现在与未来>课程论文 浅谈计算机在我国会计工作中的 应用与发展 姓名学号学院会计学院日期2010-10-30 评分页 项目权重实际分数选 ...

  4. java e.getmessage() null,浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别...

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str ...

  5. 数学知识与计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用

    浅谈计算机科学技术在数学思想中的应用 随着科学技术水平的不断提升和科学技术不断地影响着人们生活和工作的方方面面,计算机在我们生活中的普及度越来越高,对 (本文共1页) 阅读全文>> 随着互 ...

  6. 小学教育如何利用计算机思维,浅谈如何在中小学编程教学中培养学生的计算思维...

    浅谈如何在中小学编程教学中培养学生的计算思维 伍成伟 四川省 泸县二中城西学校 四川 泸州 646100 摘要:思维是人类所具有的高级认识活动,思维是人对外界输入信息与脑内储存知识经验进行一系列复杂的 ...

  7. 浅谈数学在计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用(原稿)...

    <浅谈计算机科学技术在数学思想中的应用(原稿).doc>由会员分享,可免费在线阅读全文,更多与<浅谈计算机科学技术在数学思想中的应用(原稿)>相关文档资源请在帮帮文库(www. ...

  8. 用计算机画画的意义,浅谈电脑绘画在美术教学中的意义.doc

    浅谈电脑绘画在美术教学中的意义 精品论文 参考文献 浅谈电脑绘画在美术教学中的意义 梁亮(绵阳市绵阳中学英才学校绵阳621000) [内容提要]随着人类社会的发展,科技不断进步,艺术领域也在不断进步, ...

  9. 《浅谈条形码技术在连锁超市中的应用》论文笔记(二)

    一.基本信息 标题:浅谈条形码技术在连锁超市中的应用 时间:2016 来源:品牌(西京学院) 关键词:条形码技术; 连锁超市; 条码的应用; 二.研究内容 1.问题定义: 条形码作为一项以计算机技术和 ...

最新文章

  1. 怎样在bug管理上节省时间
  2. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  3. JAR冲突问题的解决以及运行状态下如何查看加载的类
  4. 【UWP】拖拽列表项的排序功能实现
  5. 利用代码生成right scope数据
  6. 九阴真经战无不胜服务器位置,九阴真经各门派武功风水宝地分类及坐标大全
  7. 施密特正交化_格拉姆-施密特正交化--QR分解法的来源
  8. 软件测试计划和测试报告
  9. python 暂停程序 等待用户输入_Python-基础02-程序与用户交互
  10. php db2 页面乱码_DB2代码页设置乱码的处理方法
  11. XXX required a bean of type ‘XXXXXXXX‘ that could not be found ,博客可帮忙找错
  12. ubuntu下安装MP4Box
  13. C++实现小写转大写
  14. 手机连接电脑后,电脑上显示不出来手机的文件夹
  15. 英语,对程序员有多重要?
  16. STL源码剖析(一)STL简介
  17. 持久层的EAO颗粒封装
  18. 【ARM】IMX6UL串口通信
  19. 腾讯游戏开发工程师:Linux 机器 CPU 毛刺问题排查
  20. linux安装python3.7的步骤_在Linux上安装Python3.7.1

热门文章

  1. 手游产品经理初探(三)产品中的玩家行为
  2. 处理有外键约束的数据
  3. 获得当前字符串的宽度
  4. Sencha touch API
  5. java中异常与return
  6. c++和python有联系吗_Python和C++交互
  7. activiti 工作流_分享:springboot中关于工作流activiti的搭建
  8. java隐含转化_java中自动转换和强制转换还有隐含转换
  9. 分拣外观残缺的机器人_复合机器人AGV+协作机器人的应用领域
  10. batchnomal_pytorch的batch normalize使用详解