微信小程序--Taro框架实际开发中的问题汇总

这篇具有很好参考价值的文章主要介绍了微信小程序--Taro框架实际开发中的问题汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:微信小程序相信大家都不陌生,目前小程序开发主流的框架有微信原生开发uni-app,以及今天的重点Taro。编者自身小程序开发经验也不多,仅针对自身在小程序开发中的问题做一次汇总,望更多像我一样的小白少走 一点弯路。

注意:本篇博客中小程序开发基于Taro框架,使用React + Hooks,有兴趣可以点击链接了解学习!

一、Taro简单介绍

1.1 安装

具体步骤参考Taro安装,官网上都有详细的过程,这里就不多说了。

1.2 目录介绍

安装好之后,可以看到如下的目录结构,我这里使用了typescript,后缀变为了ts.

taro usedidshow,前端,微信小程序,reactjs
目录结构介绍:

├── dist                        编译结果目录
|
├── config                      项目编译配置目录
|   ├── index.js                默认配置
|   ├── dev.js                  开发环境配置
|   └── prod.js                 生产环境配置
|
├── src                         源码目录
|   ├── pages                   页面文件目录
|   |   └── index               index 页面目录
|   |       ├── index.js        index 页面逻辑
|   |       ├── index.css       index 页面样式
|   |       └── index.config.js index 页面配置
|   |
|   ├── app.js                  项目入口文件
|   ├── app.css                 项目总通用样式
|   └── app.config.js           项目入口配置
|
├── project.config.json         微信小程序项目配置 project.config.json
├── project.tt.json             字节跳动小程序项目配置 project.tt.json
├── project.swan.json           百度小程序项目配置 project.swan.json
├── project.qq.json             QQ 小程序项目配置 project.qq.json
|
├── babel.config.js             Babel 配置
├── tsconfig.json               TypeScript 配置
├── .eslintrc                   ESLint 配置
|
└── package.json

1.3 tabBar配置

  • tabBar就是我们在小程序底部看到的菜单栏,一般情况下数量不得少于2个,不超过5个。
    在Taro中,tabBar的配置是在src/app.config.ts中进行。

taro usedidshow,前端,微信小程序,reactjs

  • 在Taro中,每次新建一个页面时都需要在src/app.config.ts中的pages中进行注册,否则不生效,

taro usedidshow,前端,微信小程序,reactjs
到这里,你就可以正式开始你的小程序开发之旅啦!

二、踩坑之旅

下面总结一下我在小程序开发中遇到的一些问题吧,希望对你们有所帮助,也记录下自己艰辛的心路历程。

2.1 小程序嵌套H5页面

  • 对于没接触过过小程序的小白们来说,可能觉得居然可以这样操作,但是的确可以这样操作。
    小程序中提供了WebView组件,只需要提供H5页面的地址就可以完成在小程序中嵌套H5页面。

web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。个人类型与海外类型的小程序暂不支持使用。

import { WebView } from '@tarojs/components'

return (
    <WebView src="H5页面地址"></WebView>
)

webview组件的优缺点同样显著,在实际开发中需要注意是否需要使用。

  • 当小程序中使用webview嵌套了H5页面时,可以使用微信原生API和小程序进行交互,微信webview组件,但是要注意,只能使用提供范围内的API,例如小程序和H5之间的跳转传参。

import wx from 'weixin-js-sdk'

//H5跳转到小程序 
const lunchToWarnInfo = (content: any) => {
    // @ts-ignore
    wx.miniProgram.navigateTo({
    //注意:此处小程序的页面路径必须以'/'开头,否则无效
      url: `小程序的页面路径?参数名=值`,
    })
  }
 
//小程序接收参数
import Taro, { useDidShow} from '@tarojs/taro'

useDidShow(() => {
   let router = Taro.getCurrentInstance().router?.params?.参数名
   console.log(router)
 })

//小程序跳转到H5页面’
import { WebView } from '@tarojs/components'

//小程序到H5传参是通过webview添加后缀的形式  eg:?参数名=值

return (
    <WebView src="H5页面地址?参数名=值"></WebView>
)

//H5接收参数
import { useLocation } from 'react-router'

const location = useLocation()
const lonLat = location.search  //lonLat就是小程序传来的参数,自行格式化就能拿到

2.2 小程序间的跳转及传参

小程序之间的跳转传参就简单多了,Taro有一套API供选择,但是不同的API使用的场景也不同,具体的可以点击Taro路由跳转查看。

下面简单介绍一下如何传参以及接收参数吧,以navigateTo为例。

  • 传参
Taro.navigateTo({
      //注意:这里的路径也是以"/"开头,否则无效
      url: `/pages//index?id=1`,
})
  • 接收参数
useEffect(() => {
   let id= Taro.getCurrentInstance().router?.params.id
   console.log(id,'id')
 }, [])

//或者Taro也有专门的HOOKS用来接收参数
useEffect(() => {
	//这里的router相当于 Taro.getCurrentInstance().router
   const router = useRouter()
}, [])

useRouter及其它hooks介绍请戳这儿!

2.3 小程序回退传参

就是小程序在点击或者触发返回上一级时传参,具体使用场景比如在A页面跳转到B页面,在B页面选择地区信息然后返回到A页面,并且将选择的地区信息传给A页面用以展示。

思路:小程序路由中navigateBack可以控制返回上一级或者上上级,这时需要引入一个页面栈的概念,简单来说那就是小程序发生路由跳转时,它会把跳转的所有页面记录下来,放在一个数组里。我们可以通过控制这个数组来进行传参。

//pages里就包括发生跳转的页面对象,是一个数组
const pages = Taro.getCurrentPages()
//formPage控制数组里的任意一个页面对象
const formPage = pages[pages.length - 2]
formPage.id= 1

//delta=1,表示回退一层
Taro.navigateBack({
  delta: 1,
})

//接收参数参考上述 2.2

2.4 小程序下拉刷新/上拉加载

这个大家应该不陌生吧,就是在小程序中向上或向下拖动页面,起到刷新数据和加载更多数据的功能。

  • 下拉刷新/上拉加载
    需要在 src/app.config.ts 中的window中配置:
window: {
    enablePullDownRefresh: true,
    onReachBottomDistance: 50,  //下拉距离
},

思路:页面中监听下拉动作,处理数据,完毕后停止下拉。

import Taro, { usePullDownRefresh,useReachBottom } from '@tarojs/taro'

usePullDownRefresh(() => {
 	console.log('下拉了,日历')
 	//处理数据
  	Taro.stopPullDownRefresh()
})

useReachBottom(() => {
  console.log('上拉了')
  //数据处理
})

2.5 分享好友/朋友圈

点击小程序右上方的三个点,即可分享到好友/朋友圈.

  • 分享好友

在页面的index.config.ts中加上 enableShareAppMessage: true,

 //分享给好友
import Taro, { useShareAppMessage } from '@tarojs/taro'

/*
  分享好友有两种场景:1,点击右上角的三个点->点击分享好友;  type:button
  					2,点击页面内的转发按钮  type:menu

*/

useShareAppMessage((res) => {
  if (res.from === 'button') {
    // 来自页面内转发按钮
    console.log(res.target)
  }
  if(res.from === 'menu'){
    //来自右上角的分享好友
    console.log(res.target)
  }
  
  return {
    title: '标题',
    path: '/pages/index/index',
  }
})

需要注意的是:如果分享的页面数据来源于上一级,那么分享页面之后相当于直接访问该页面,可能会出现页面空白没有数据的情况,这时候就需要在path里带上参数.

 return {
    title: '标题',
    path: '/pages/index/index?id=1',
  }
  • 分享朋友圈

在页面的index.config.ts中加上 enableShareTimeline: true,

import Taro, { useShareTimeline} from '@tarojs/taro'

//分享朋友圈
useShareTimeline(() => {
  return {
    title: '标题',
    path: '/pages/index/index',
    imageUrl: '',
  }
})

2.6 页面转发分享/长按图片识别

如果想在小程序中分享某个页面给好友,还可以通过Button来实现。 Taro中提供了一些组件,其中就包括Button组件,可以直接调用小程序API。

  • 页面转发分享

//只需要设置  openType="share"
<Button
    className="share-img"
    openType="share"
   >
      <Image src={'图片路径'} />
</Button>
  • 长按图片识别

Taro中使用Image引入图片,还可以实现长按识别的功能,如果是二维码,识别后可以直接点击跳转过去。

//设置 showMenuByLongpress={true}
<Image src={'图片路径'} showMenuByLongpress={true} />

2.7 自定义顶部导航栏

就是去掉小程序自带的右上角的按钮,使用场景如,需要在顶部添加背景图,
只需要在index.config.ts中配置,然后就可以用自定义DOM替代原来的导航栏。

navigationBarBackgroundColor: '#3E7DF8', //背景色
navigationStyle: 'custom', //自定义导航栏

2.8 弹出授权框

小程序中很多操作需要用户授权后才能够执行,所以要先显示授权框,取得用户的授权信息后再进行后续操作。例如需要获取用户位置信息,先查看用户是否授权,若未授权,则弹出授权框。

Taro.getSetting({
  success: function (res) {
    console.log(res.authSetting)
    if(res.authSetting['scope.userLocation']){
    	//用户授权过
    }else{
    	//用户未授权过
    	Taro.authorize({
	        scope: 'scope.userLocation',
	        success: function () {
	          // 用户已经同意小程序使用定位功能
	         Taro.getLocation({
			        type: 'wgs84',
			        success: function (res) {
			           //定位成功,res包括位置信息,lon.lat等
			           console.log('res',res)
			        },
			        fail: function () {
			          //定位失败
			        },
      		})
        }
      })
    ]
  }
})

2.9 订阅消息

详情请点击小程序订阅消息,以 长期订阅消息为例,制作好模板后,拿到模板id,模板就是当订阅消息发送到你的微信上的时候,所要展示的信息及其方式的一种形式。订阅消息之前需要取得用户的授权信息。

//注意:订阅消息需要用到openid,openid是登录之后后端返的
Taro.requestSubscribeMessage({
	  //模板id
	  tmplIds: ['模板id'],
	  success: function (res) {
	    Taro.request({
	      url: `订阅消息的接口`,
	      method: 'POST',
	      timeout: 600000
	    })
	  },
})

2.10 登录流程

小程序的登录流程还是比较麻烦的,官方给的流程图如下: 微信小程序登录

taro usedidshow,前端,微信小程序,reactjs
流程相信大家都能看懂,但是实际操作后可能就一头雾水,编者在这一块也是一样,我就根据实际的开发总结下自己的理解,可能会有所纰漏:

小程序的登录方式可能有所差异,编者本次小程序中使用的是微信授权登录,也可能是手机号登录等;
以微信授权登录为例:

/*
	1,检测本地是否存有用户信息;
	2,检测登录态是否过期;
	3,如果没有用户信息或者登录态过期则需重新登录;
	4,点击授权登录按钮,检测用户是否授权获取用户信息;
	5,若未授权,则调起用户信息授权框;
	6,点击授权,调取Taro.login()登录,发送请求拿到openId并保存到本地;
	7,获取用户信息,保存到本地,展示登录后的页面;
*/

三、总结

小程序开发中遇到的问题远不止这些,时间原因先总结这么多,以后如果踩到新的坑了会记录上去。总体而言,小程序上手还是比较简单的,只需要你熟悉Vue/React中的一种,当然Uni我暂时还没用过。
废话不多说了,有问题评论区交流哈!文章来源地址https://www.toymoban.com/news/detail-561364.html

到了这里,关于微信小程序--Taro框架实际开发中的问题汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Taro支持富文本(微信小程序)图片样式问题及可点击事件

    react提供的dangerouslySetInnerHTML即可 这个属性相比于其他方案的优势在于:1. 支持修改富文本样式  2. Taro官方属性,比插件靠谱 使用这个属性存在两个问题需要解决 1、需要解决图片样式错乱问题 2、图片点击可放大 tips: 正常方式无法绑定事件,样式设置不生效   真机测试没有

    2024年02月10日
    浏览(36)
  • taro 支付宝/微信小程序的chooseImage真机和开发工具上的区别

    支付宝小程序 微信小程序

    2024年02月10日
    浏览(38)
  • 微信小程序 开发中的问题(simba_wx)

    需要先下载 protobufjs-cli 依赖 然后再当前目录下的终端,执行以下命令 proto/test.proto proto/test.json :意思是找到当前目录的 proto 文件夹下的 test.proto 文件,将该文件转为 test.json 并将该文件放到 proto 文件夹下 由于收到数据是二进制的,虽然拿到的 proto 文件的 json 结构,但这还

    2023年04月26日
    浏览(24)
  • taro(踩坑) npm run dev:weapp 微信小程序开发者工具预览报错

    控制台报错信息: VM72:9 app.js错误:  Error: module \\\'vendors-node_modules_taro_weapp_prebundle_chunk-JUEIR267_js.js\\\' is not defined, require args is \\\'./vendors-node_modules_taro_weapp_prebundle_chunk-JUEIR267_js.js\\\' 环境: node 版本:v18.16.0 Taro 版本:v3.6.18 vue3 typeScript sass webpack5 解决办法: webpack5 改为 webpack4 set NOD

    2024年02月03日
    浏览(43)
  • 关于在微信小程序中使用taro + react-hook后销毁函数无法执行的问题

    问题: 在 taro中使用navigageTo() 跳转路由后hook中useEffect 的return函数没有执行 没有执行return函数 框架版本:      tarojs:  3.6                            react:   18.0    原因: 使用navigateTo() 跳转路由的话并不会销毁页面和组件,会加入一个最大数量为十层的路由

    2024年01月24日
    浏览(33)
  • 【taro react】---- 解决 iOS 真机微信小程序 Input 密码框 type 切换会导致 Input 内容丢失问题

    1. 问题场景 在密码登陆时,有显示和隐藏密码的功能,实现方式很简单,直接对输入 input 的 type 进行 password 和 text 值进行切换,就可以实现密码的显示和隐藏。 2. 实现代码 通过修改 input 的 type 值实现密码的显示和隐藏。 密码的显示和隐藏控制图标也是通过 type 值进行判断

    2024年02月03日
    浏览(21)
  • 微信小程序+Taro 混编,Taro 使用微信原生 behaviors

    最近有一个小程序项目,因为一些原因项目架构选择了微信小程序原生+Taro 混编的方式进行开发,在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性,因为混编的原因项目当中已有原生页面在使用 behaviors,所以需要一个方案在不影响其他页面的基础上使 Taro 也能使用这

    2024年02月11日
    浏览(31)
  • 使用taro或react框架的,针对微信小程序隐私协议的组件封装,网上找了很久都没有相关模版,只有自己写了一个,现分享给有困难的同伴

    注意:我是使用hooks的,其他可以参考封装思路大同小异的 首先写一个PrivacyAgreement.js文件 样式文件index.scss如下 在需要用到隐私协议的组件或者api的页面里面引用

    2024年02月05日
    浏览(38)
  • 【Taro】微信小程序隐私协议改造

     微信要求小程序开发者在2023.9.15日前将小程序中调用获取用户隐私api的接口时,都必须要先让用户授权,如果用户拒绝授权,那么小程序的对应接口或组件将直接禁用。 那么首先,请将微信小程序开发者工具-详情-本地设置-基础调试库 切换至2.33.0以上。低于该调试库会报错

    2024年02月09日
    浏览(36)
  • 【Taro】微信小程序关于隐私协议改造

    之前微信刚公布要求整改小程序获取用户隐私接口的改造公告那会,Taro还没有支持这方面的更新,于是当时就暂时搁置了一下,后面发现有人回复了我的提问,并且给出了解决方案。按照大佬给出的解决方案试了下,果然可行,所以在此记录分享一下! 首先,当时的帖子在

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包