跌宕起伏的小程序之登录组件

2023-11-22 10:31

本文主要是介绍跌宕起伏的小程序之登录组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缘起?

开始的开始,简单粗暴。在微信小程序里,一行wx.getUserInfo即可弹窗用户授权登陆。大部分小程序图省事,直接在打开小程序的时候就调这个方法。所以那时候一个印象就是随便打开一个小程序,进去就是弹窗让我登陆,想拿我的微信信息,给人一种不安全的感觉。

当时的代码长这样:

<script>
wx.getUserInfo({success(res) {// res.userInfo 用户信息}
})
</script>

如果要与业务结合起来,通常会是这样(以下代码示例均使用wepy框架):

<template><!-- 下面这个操作需要用户登陆 --><view @tap="clickA">需要登陆操作A</view><view @tap="clickB">需要登陆操作B</view>
</template>
<script>
{methods = {clickA () {await getUserInfo() // wx.getUserInfo 封装在这里面// 接着写A的业务逻辑}clickB () {await getUserInfo()// 接着写B的业务逻辑}}
}</script>

变数?

为了防止滥用,微信后来决定调整这个交互,改变了授权登陆流程。于是就发布了一个公告,很突然的,就是直接调wx.getUserInfo不再弹窗询问用户是否授权。而是需要使用原生button组件,用户实际操作点击了屏幕才能触发。

640?wx_fmt=gif

此时的代码变成了这个熊样:

<template><button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">点击授权登陆</button>
</template>
<script>{methods = {bindGetUserInfo (e) {// e.detail.userInfo 用户信息}}}
</script>

看上去问题不大,其实已经原地爆炸。现在如果和业务结合起来就会有很多赘余代码:

<template><view><button class="auth-btn" open-type="getUserInfo" bindgetuserinfo="clickA"></button>需要登陆操作A</view><view><button class="auth-btn" open-type="getUserInfo" bindgetuserinfo="clickB"></button>需要登陆操作B</view>
</template>
<script>{methods = {clickA (e) {if (e.detail.errMsg === 'getUserInfo:ok') {// 接着写A的业务逻辑}}clickB (e) {if (e.detail.errMsg === 'getUserInfo:ok') {// 接着写B的业务逻辑}}}}
</script>
<style lang="less">.auth-btn {// 使其cover在父容器上并透明}
</style>

之前接手过一个遗留项目,里面密密麻麻充斥着这种代码,我看5分钟吐了3次?。DRY!DRY!DRY!有代码洁癖加重度强迫症的我完全不能忍。

归途?

作为一个有追求的追风少年,思虑良久,得想个辙?,不然之后的开发生涯就充斥着难受。wepy是一个组件化的小程序框架,可以像写vue组件一样去写小程序的自定义组件。于是就有了一个很自然的想法。把登陆按钮封装起来,使其足够方便。

最后的最后,组件化后的代码长这样?:

<template><view><LoginButton1 @tap.user="clickA"></LoginButton1>需要登陆操作A</view><view><LoginButton2 @tap.user="clickB"></LoginButton2>需要登陆操作B</view>
</template>
<script>import LoginButton from '@/components/LoginButton'{components = {LoginButton1: LoginButton,LoginButton2: LoginButton,}methods = {clickA () {// 直接写A的业务逻辑}clickB () {// 直接写B的业务逻辑}}
</script>

{ LoginButton1: LoginButton, LoginButton2: LoginButton }这个诡异的写法主要是因为wepy的组件是静态组件(其实就是编译时代码复制),导致每实例化一个都要分配一个id?。据说wepy即将发布2.0版本,会解决这个问题,甚是期待。

这可能不是最优方案,但确实方便了许多。

临末,送大家个福利?

qr-code-258.jpg

转载于:https://www.cnblogs.com/iovec/p/10495092.html

这篇关于跌宕起伏的小程序之登录组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/409518

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解