taro项目--使用axios
Posted 瞬间的醒悟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了taro项目--使用axios相关的知识,希望对你有一定的参考价值。
axios-taro-adapter
基于axios
支持自定义适配器,只需要针对不同环境下的http请求api进行适配进行替换,axios
可以使用在任意平台。
由于axios
在其他项目中大量使用,本项目实现Taro
框架下的适配器,可以在Taroa
项目中完美使用原汁原味的axios
,统一团队前端技术栈,统一http请求类库。
采用此方式对项目零侵入,开发者专注于axios
的api即可。
git clone GitHub - SpringHgui/axios-taro-adapter: axios adaptor for taro.request
GitHub - SpringHgui/axios-taro-adapter: axios adaptor for taro.request
Quick start
npm i axios@0.27.2
npm i axios-taro-adapter
- create axios instance
仅需2行代码,完美使用axios
替换Taro.request
// api.js import axios from "axios"; import TaroAdapter from "axios-taro-adapter"; const API_URL = "https://api.xxxx.com/"; const instance = axios.create( baseURL: API_URL, timeout: 10000, adapter: TaroAdapter, // add this line,添加这一行使用taroAdapter ); export const postData = data => return instance.post("/api/test", data);
例如: 原汁原味的拦截器
// interceptors for request instance.interceptors.request.use( function (config) return config; , function (error) return Promise.reject(error); ); // interceptors for response instance.interceptors.response.use( function (response) if (response.data.code !== 0) return Promise.reject(response.data); else return response.data; , function (error) return Promise.reject(error.message); );
Taro:使用taro完成小程序开发
前言:taro是一个可以很好实现一次开发,多端统一的框架,本文只介绍它小程序端开发的一些内容。
小程序项目搭建
gitup已经有很清楚的说明:https://github.com/NervJS/taro
一.主要操作步骤及命令:
1.cnpm install -g @tarojs/cli
全局安装taro脚手架,此处我用的是淘宝镜像cnpm,
淘宝镜像配置命令:npm install -g cnpm --registry= https://registry.npm.taobao.org
安装过程中会问你是否需要redux模板,可以先不要,等感觉确实需要redux再添加,
ts如果不会的话也不需要安装
2.执行 cnpm run dev:weapp命令,就可以进入小程序开发环境进行开发了
二.开发过程碰到的一些坑:
1.事件绑定传参
本人喜欢用es6方式传值,但是在taro使用es6传值编译会出错,所以在使用taro制作小程序时建议使用.bind传值,如点击事件传值:
onClick={this.onClick.bind(this,num)}
2.底部TabBar使用
官方的TabBar配置只要在app.js中配置好就行了,但是官方的TabBar只提供了部分属性不好扩展,如果需要扩展,建议自定义开发
3.小程序场景和页面参数的获取值获取
小程序场景值获取需要注意一点 ,: 只能在app.js的componentWillMount生命周期获取,直接上代码
const params = this.$router.params;//获取所有参数
const query = params.query ;//query里面是链接上带的参数
const scene = params.scene ;//scene为场景值
如果在其他页面中使用 this.$router.params ,如果链接带参数,得到的就是参数对象;如果不带参数,得到的是页面路径,是拿不到scene场景值的,如果开发者需要场景值做一些事情,最好在 app.js中拿到scene储存到本地
4.video组件使用时的一些坑
(1) poster属性设置的背景图无效 ,会一闪而过;
(2) 网上所说的,用cover-view或者cover-image,在视频组件外套一层,亲测在开发者工具下可以,但是真机调试下不行,代码如下:
<video id="myVideo" class="video-xx" src="{{videoUrl}}" controls>
<cover-view class="controls"> <cover-image class="img" src="{{img}}"
/> </cover-view> </video>
本人的解决方案是,先隐藏Video组建,显示背景图;点击背景图再调用播放视频接口,解绝了这个问题,代码如下:
<Video className=‘video‘ src=‘{video} style={this.state.videoStyle} controls={true} customCache={false} autoplay={false} onPause={this.bindplay} id=‘video‘ > </Video> <View class=‘img_box‘ style={this.state.viewStyle}> <Image className=‘img‘ src={Play} onClick={this.play} /> </View>
在play 方法中加入
const video = Taro.createVideoContext(‘video‘); video.play();
(4) video不能设置圆角样式,在开发者工具中可以展示圆角,真机上是无效的
5.获取微信授权,手机号登录小程序
获取微信授权,拿到手机号登录小程序,使用该功能前要注意一点:该功能仅支持企业版小程序
下面讲讲该功能遇见的坑:
(1)使用该功能需要先获取登录的code码,传输code到后台接口获取到session_key,获取code,最好是在componentWillMount生命周期里面,不要放在getPhoneNumber()(授权获取手机号的方法中),否则多次操作获取手机号操作会出现session_key失效的问题,直接上代码:
//首先按钮上做好事件绑定<Button openType=‘getPhoneNumber‘
onGetPhoneNumber={this.getPhoneNumber.bind(this)}>微信快速登录</Button>//componentWillMount生命周期获取code
Taro.login().then(res => {
if (res.code) {
this.setState({
code: res.code
})}})//getPhoneNumber获取授权解密手机号登录
getPhoneNumber(e)
暂时先写这么多,后面会再补充一些,这里有个简单的小程序(涉及到的功能:手机号授权登陆,手机验证码登陆,登出,页面跳转的交互,视频播放等),
以上是关于taro项目--使用axios的主要内容,如果未能解决你的问题,请参考以下文章