- React vs Vue3深度对比与使用场景分析
匹马夕阳
VUE技术集锦react.js前端前端框架
在前端开发领域,React和Vue3是两个备受瞩目的框架。它们都提供了强大的功能和灵活的开发方式,但各自的设计理念、使用方式和适用场景有所不同。本文将深入探讨React和Vue3的区别,通过代码示例和具体的使用场景,帮助开发者更好地理解并选择适合自己的框架。一、核心概念与设计理念1.ReactReact是由Facebook开发的一个JavaScript库,主要用于构建用户界面。它的核心理念是组件化
- vue3中测试:单元测试、组件测试、端到端测试
皓月当空hy
vue.js
1、单元测试:单元测试通常适用于独立的业务逻辑、组件、类、模块或函数,不涉及UI渲染、网络请求或其他环境问题。describe('increment',()=>{//测试用例})toBe():用于严格相等比较(===),适用于原始类型或检查引用类型是否指向同一个对象。toEqual():用于深度比较,检查两个对象或数组的内容是否相等(即使它们不是同一个对象)。例如:test('increments
- 现代前端框架渲染机制深度解析:虚拟DOM到编译时优化
桂月二二
前端框架
引言:前端框架的性能进化论TikTokWeb将React18迁移至Vue3后,点击响应延迟降低42%,内存占用减少35%。Shopify采用Svelte重构核心交互模块,首帧渲染速度提升580%。Discord在Next.js14中启用ReactServerComponents后,服务端数据吞吐量增加240%,客户端Bundle体积减少54%。一、主流框架技术架构差异1.1三大范式运行机制对比维度
- vue3中子组件调用父组件事件
小华0000
vue.jsjavascript前端
在Vue3中,子组件调用父组件的事件(或方法)的方式与Vue2类似,但Vue3引入了CompositionAPI,这可能会改变你组织代码的方式。不过,基本的通信机制——通过自定义事件($emit)通知父组件——仍然保持不变。以下是如何在Vue3中使用OptionsAPI和CompositionAPI的示例:使用OptionsAPI父组件(ParentComponent.vue)父组件importC
- Vue3 动态创建组件实现数据绑定(h函数)
CrxzYia
前端前端javascriptvue.js
经常看到框架里使用h函数动态创建组件,可自己使用时发现数据无法绑定,我使用的代码如下{span:6,label:"区",path:"groupId",component:h(NSelect,{options:groupIdOptions.value,value:modalRef.value.groupId,"onUpdate:value":(value:string)=>modalRef.valu
- TypeScript 中的 type 和 interface:你真的了解它们的不同吗?
初见雨夜
前端typescriptjavascript前端
如果你有写过Vue3的项目,那么对TypeScript肯定不会陌生。不管是公司新项目技术选型还是个人学习开发新的前端项目,Vue3+TypeScript已经成为首选技术方案之一在TypeScript这个强大的静态类型系统中,type和interface是两个重要的关键字,用于定义和描述数据类型。然而,这两者之间的区别是什么,在实际开发过程中我们要怎么用呢?废话不说,直接进入正题,就让我们一起深入探
- 深入解析 Vue 3 编译宏:揭开 `<script setup>` 的魔法面纱
斯~内克
vue知识点前端vue.js前端javascript
一、编译宏的本质与设计哲学1.1什么是编译宏在Vue3的CompositionAPI生态中,编译宏(CompilerMacros)是一组特殊的语法结构,它们在代码编译阶段被Vue编译器处理,最终转换为标准的JavaScript代码。这些宏函数是Vue3语法糖的核心组成部分,主要包含:defineProps:声明组件propsdefineEmits:定义自定义事件defineExpose:暴露组件公
- 深入探讨 Vue 3 响应式 API:为什么 ref/reactive 需要类型匹配?
斯~内克
vue知识点前端学习vue.js前端javascript
一、Vue3响应式系统基础在Vue3的CompositionAPI中,ref和reactive是构建响应式数据的核心工具。它们的定位差异源于JavaScript语言特性:ref设计初衷:处理基础类型(primitivetypes)的响应式包装reactive设计初衷:处理引用类型(referencetypes)的深度响应代理技术实现差异:ref通过对象包装({value:...})+reactiv
- Vue 3 生命周期函数详解
licy__
vue.js前端javascript
Vue3生命周期函数详解引言Vue.js是一个渐进式的JavaScript框架,用于构建用户界面。Vue3在性能、API设计和开发者体验方面进行了重大改进。理解Vue3的生命周期函数(LifecycleHooks)对于开发高效的Vue应用至关重要。本文将详细介绍Vue3的生命周期钩子、每个阶段的作用及其代码示例,帮助读者更好地掌握这一重要概念。1.Vue3生命周期概述Vue实例从创建到销毁经历了一
- vue3的实用工具库@vueuse/core
罗会
javascript前端vue.jsvueuni-app
1.什么是@vueuse/core是一个基于VueCompositionAPI开发的实用工具库,旨在通过封装高频功能为可复用的组合式函数(Composables),简化Vue应用的开发流程。提供200+开箱即用的函数,覆盖状态管理、浏览器交互、传感器、网络请求等场景,例如useStorage(状态持久化)1、useMouse(鼠标追踪)1;支持Vue2和Vue3,并通过@vueus
- Vue函数式编程终极指南:像写诗一样写代码
lifire_H
vue.js前端javascript
引言:当Vue遇上函数式,优雅永不过时你是否见过这样的代码?组件间状态乱飞、副作用神出鬼没、单元测试如走钢丝……函数式编程就像代码界的“断舍离大师”,教你用纯函数、不可变数据和高阶魔法,让Vue代码变得干净、稳定且充满艺术感!本文不仅会揭秘函数式编程的核心心法,还会手把手教你:✅如何用CompositionAPI实现函数式优雅✅高阶函数与柯里化的实战妙用✅Vue3函数式组件性能优化秘籍✅配套工具链
- uniapp开发小程序手写板、签名、签字
故里2130
包教会专栏uni-app小程序
可以使用这个插件进行操作手写板-签名签字-lime-signature-DCloud插件市场但是目前这个插件没有vue3setupCompositionAPI的写法。所以对于此文档提供的可以直接使用,需要使用CompositionAPI方式实现的,可以继续看。因为CompositionAPI方式,更加的简单、灵活,在今后的编程之中要多用、多学,这样才能写出更加健壮的代码。1.首先建立一个可以运行的
- 【uni-app】微信小程序使用lime-painter生成海报
cjsnyxz
前端
lime-painter是一个专为UniApp设计的插件,用于优雅地生成海报,并支持下载海报图片。它支持在多个平台中使用,并且提供了盒子、文字、图片、二维码等配置选项,允许开发者根据项目需求按照UI设计稿对海报进行高度还原。本文将介绍如何使用lime-painter插件在UniApp中实现海报的生成及下载。技术栈:uni-app、Vue3(3.4.21)、TypeScript(4.9.5)、wot
- 踩坑-vue3.0-uniapp-全局变量prototype失效
cometxd
原型模式javascript前端
项目场景:踩坑-vue3.0-uniapp-全局变量prototype失效问题描述踩坑-vue3.0-uniapp-全局变量prototype失效main.js中全局变量失效Vue.prototype.$testname="testNAME";解决方案:使用exportfunctioncreateApp(){constapp=createSSRApp(App)app
- Vue3 中如何实现响应式系统中的依赖收集和更新队列的解耦?
程序员黄同学
前端开发JavaScriptJava面试题前端javascriptvue.js
一、问题解析:为什么需要解耦?在响应式系统中,依赖收集(追踪数据与视图的关联关系)和更新队列(批量处理数据变化带来的副作用)是两个核心但职责不同的模块。Vue3通过以下设计实现解耦:依赖收集阶段:在数据读取时建立响应式对象->副作用函数的映射关系更新触发阶段:数据修改时通过调度器控制副作用的执行策略队列机制:将同步的多次修改合并为单次更新操作这种解耦带来的好处:更好的性能(批量更新减少重复计算)更
- Pinia
Sunshinedada
flutter
官网:https://pinia.vuejs.org/zh/introduction.htmlPinia和VuexPinia和Vuex都是Vue.js状态管理库,但它们在一些方面有所不同。Pinia是一个轻量级的状态管理库,它专注于提供一个简单的API来管理应用程序的状态。相比之下,Vuex是一个更完整的状态管理库,它提供了更多的功能,比如模块化、插件和严格模式等。Pinia是基于Vue3的Com
- Vue01
memorycx
vue.jsjavascriptecmascript
vuevue基础vue-clivue-routervuexelement-uivue3vue基础vue是什么一套用于构建用户界面的渐进式JavaScript框架采用组件化模式,提高diamagnetic复用率,让代码更好维护声明式编码,让编码人员无需直接操作DOM,提高开发效率去vue官网下载开发版本,然后在html文件中引入//这是在头部引入细节:root容器里的代码依然符合html规范,只不过
- Vue3使用Axios请求二次封装(包含跨域配置)
数学分析分析什么?
Vue相关前端vuejavascript
一.axios安装与封装1.1安装npminstallaxios1.2二次封装1.引入axiosimportaxiosfrom'axios'2.创建axios实例使用axios对象中的create方法创建实例。可以在创建实例时,配置基础路径、超时响应时间。constrequest=axios.create({//基础路径baseURL:import.meta.env.VITE_APP_BASE_A
- Vue3切换页面后页面不渲染问题其一
数学分析分析什么?
Vue相关前端javascriptvue.js
在Vue3环境下,页面A在标签内对一级根节点...注释,进入A页面后跳转至B页面,全部页面不渲染。出现错误的页面代码如下:注释内容-->正常内容此时需要将注释内容删除,页面才能正常渲染。
- 面试题-Vue2和Vue3的区别
奶糖 肥晨
vue3vuevue.jsjavascript前端
文章目录1.响应式系统2.组合式API(CompositionAPI)3.Fragment(碎片)4.Teleport(传送门)5.性能改进6.移除或改变的功能7.构建工具8.TypeScript支持Vue2和Vue3之间存在许多重要的区别,这些区别涵盖了性能、API设计、组合式API(CompositionAPI)、响应式系统以及构建工具等方面。以下是一些关键的区别,并附带代码示例来加以说明。1
- 手把手完成前端Vue3 + Vite项目工程化搭建
m0_74825447
前端
vue3_vite_project基于Vue3+Vite搭建的前端工程化项目演示模板环境准备开发环境:Node.jsv16.14.2+npmv8.3.2开发工具:VisualStudioCodeorWebStorm源代码管理:Gitnpm镜像:npmconfigsetregistryhttps://registry.npmmirror.com技术栈技术栈描述Vue渐进式JavaScript框架Vi
- 快速辨别Vue版本的8个关键方法
wujiada001
前端vue.js前端javascript
全局API创建方式(最明显特征)//Vue3特征import{createApp}from'vue'constapp=createApp(App)app.mount('#app')//Vue2特征importVuefrom'vue'newVue({el:'#app'})组合式API语法//←这是Vue3标志constcount=ref(0)响应式系统差异//Vue3使用ref/reactiveco
- Vue的组合式API和选项式API有什么区别
wujiada001
前端vue.js前端javascript
Vue3的组合式API(CompositionAPI)和选项式API(OptionsAPI)是两种不同的组件编写方式,主要区别如下:1.代码组织方式选项式API:按照选项(如data、methods、computed等)组织代码,逻辑分散在不同选项中。exportdefault{data(){return{count:0}},methods:{increment(){this.count++}}}
- Vue2 - 判断接口返回的二进制文件流 Blob 是二进制文件流对象还是 JSON 错误提示信息,当请求设置 responseType: blob 时捕获后端状态码返回的是可下载文件还是下载失败提示
王二红
+Vuevue2判断blob对象是否是文件流调接口拿文件流下载后是jsonvue下载二进制文件流blob下载文件流怎么知道接口返回错成功还是失败都是blob对象是文件就下载
前言如果您需要Vue3版本教程,请访问这篇文章。在vue2|nuxt2项目开发中,解决下载Blob二进制文件流对象时,无法区分是正常文件流还是错误的json数据信息问题,默认无论成功还是失败永远返回blob对象,但使用本方法后,您可以轻松判断接口返回了【二进制文件流】还是【失败对象错误信息】。如下图所示(调用同一个接口),当是正常的文件流时进行下载,否则就用接口返回的错误信息提示用户,当把请求re
- Vue3+ts 封装一个 tab标签页组件
阿丽塔~
vue.js前端javascript
前言:在写项目的时候,用到了element-plus,在这个项目中需要使用tabs组件,但是使用element-plus的tab组件来满足项目中的tab样式,有的时候会有点麻烦,且自己也想动手试试封装一个tab组件,于是,开干!!最终效果图:这里面的选中下横线用的是绝对定位.indicator{position:absolute;bottom:0;height:2px;background-col
- Vue3 文件下载方法
深度视觉机器
NodeJS语言javascriptvue.js前端
文件下载方式1.window.location.href方式注意:文件名称为中文时要使用encodeURI转码;下载文件格式为图片或txt时文件会直接打开;下文中${url}表示接口地址根据文件名下载:window.location.href=`${url}/文件名.xlsx`;文件名有中文:window.location.href=`${url}/${encodeURI("文件名.xlsx")}
- SpringBoot速成概括
噗运特
springbootjavaspring
视频:黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili图示:
- vue3 下载文件 responseType-blob 或者 a标签
阿丽塔~
前端excelvue
在Vue3中,你可以使用axios或fetch来下载文件,并将responseType设置为blob以处理二进制数据。以下是一个使用axios的示例:使用axios下载文件首先,确保你已经安装了axios:npminstallaxios然后在你的Vue组件中使用axios下载文件:下载文件import{handleFileExport}from'@/utils/exportExcel';impor
- Vite (Vue3 + TS)解决跨域问题
JingpengZhang
Vue前端vue.jsjavascript
1.vite.config.ts中添加如下代码:exportdefaultdefineConfig({server:{proxy:{'/api':{target:'http://xxx.com/',//实际请求地址changeOrigin:true,rewrite:(path)=>path.replace(/^\/api/,""),},},},})2.修改axois封装中的baseURL:base
- 从零搭建 Vue3 + VIte + Ts 项目 —— 并集成eslint 、prettier
2301_82244509
ubuntulinux运维
plugins:[‘vue’,‘@typescript-eslint’],//新增root:true,//对某些文件进行单独配置(这里针对TypeScript文件)overrides:[{files:[‘.ts’,'.tsx’,‘*.vue’],rules:{‘no-undef’:‘off’,//在TypeScript中没有必要使用no-undef规则},},],//自定义规则rules:{//h
- Algorithm
香水浓
javaAlgorithm
冒泡排序
public static void sort(Integer[] param) {
for (int i = param.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
int current = param[j];
int next = param[j + 1];
- mongoDB 复杂查询表达式
开窍的石头
mongodb
1:count
Pg: db.user.find().count();
统计多少条数据
2:不等于$ne
Pg: db.user.find({_id:{$ne:3}},{name:1,sex:1,_id:0});
查询id不等于3的数据。
3:大于$gt $gte(大于等于)
&n
- Jboss Java heap space异常解决方法, jboss OutOfMemoryError : PermGen space
0624chenhong
jvmjboss
转自
http://blog.csdn.net/zou274/article/details/5552630
解决办法:
window->preferences->java->installed jres->edit jre
把default vm arguments 的参数设为-Xms64m -Xmx512m
----------------
- 文件上传 下载 解析 相对路径
不懂事的小屁孩
文件上传
有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着,网上各种百度着。
下面总结一下遇到的问题:
文件上传,在页面上传的时候,不要想着去操作绝对路径,浏览器会对客户端的信息进行保护,避免用户信息收到攻击。
在上传图片,或者文件时,使用form表单来操作。
前台通过form表单传输一个流到后台,而不是ajax传递参数到后台,代码如下:
<form action=&
- 怎么实现qq空间批量点赞
换个号韩国红果果
qq
纯粹为了好玩!!
逻辑很简单
1 打开浏览器console;输入以下代码。
先上添加赞的代码
var tools={};
//添加所有赞
function init(){
document.body.scrollTop=10000;
setTimeout(function(){document.body.scrollTop=0;},2000);//加
- 判断是否为中文
灵静志远
中文
方法一:
public class Zhidao {
public static void main(String args[]) {
String s = "sdf灭礌 kjl d{';\fdsjlk是";
int n=0;
for(int i=0; i<s.length(); i++) {
n = (int)s.charAt(i);
if((
- 一个电话面试后总结
a-john
面试
今天,接了一个电话面试,对于还是初学者的我来说,紧张了半天。
面试的问题分了层次,对于一类问题,由简到难。自己觉得回答不好的地方作了一下总结:
在谈到集合类的时候,举几个常用的集合类,想都没想,直接说了list,map。
然后对list和map分别举几个类型:
list方面:ArrayList,LinkedList。在谈到他们的区别时,愣住了
- MSSQL中Escape转义的使用
aijuans
MSSQL
IF OBJECT_ID('tempdb..#ABC') is not null
drop table tempdb..#ABC
create table #ABC
(
PATHNAME NVARCHAR(50)
)
insert into #ABC
SELECT N'/ABCDEFGHI'
UNION ALL SELECT N'/ABCDGAFGASASSDFA'
UNION ALL
- 一个简单的存储过程
asialee
mysql存储过程构造数据批量插入
今天要批量的生成一批测试数据,其中中间有部分数据是变化的,本来想写个程序来生成的,后来想到存储过程就可以搞定,所以随手写了一个,记录在此:
DELIMITER $$
DROP PROCEDURE IF EXISTS inse
- annot convert from HomeFragment_1 to Fragment
百合不是茶
android导包错误
创建了几个类继承Fragment, 需要将创建的类存储在ArrayList<Fragment>中; 出现不能将new 出来的对象放到队列中,原因很简单;
创建类时引入包是:import android.app.Fragment;
创建队列和对象时使用的包是:import android.support.v4.ap
- Weblogic10两种修改端口的方法
bijian1013
weblogic端口号配置管理config.xml
一.进入控制台进行修改 1.进入控制台: http://127.0.0.1:7001/console 2.展开左边树菜单 域结构->环境->服务器-->点击AdminServer(管理) &
- mysql 操作指令
征客丶
mysql
一、连接mysql
进入 mysql 的安装目录;
$ bin/mysql -p [host IP 如果是登录本地的mysql 可以不写 -p 直接 -u] -u [userName] -p
输入密码,回车,接连;
二、权限操作[如果你很了解mysql数据库后,你可以直接去修改系统表,然后用 mysql> flush privileges; 指令让权限生效]
1、赋权
mys
- 【Hive一】Hive入门
bit1129
hive
Hive安装与配置
Hive的运行需要依赖于Hadoop,因此需要首先安装Hadoop2.5.2,并且Hive的启动前需要首先启动Hadoop。
Hive安装和配置的步骤
1. 从如下地址下载Hive0.14.0
http://mirror.bit.edu.cn/apache/hive/
2.解压hive,在系统变
- ajax 三种提交请求的方法
BlueSkator
Ajaxjqery
1、ajax 提交请求
$.ajax({
type:"post",
url : "${ctx}/front/Hotel/getAllHotelByAjax.do",
dataType : "json",
success : function(result) {
try {
for(v
- mongodb开发环境下的搭建入门
braveCS
运维
linux下安装mongodb
1)官网下载mongodb-linux-x86_64-rhel62-3.0.4.gz
2)linux 解压
gzip -d mongodb-linux-x86_64-rhel62-3.0.4.gz;
mv mongodb-linux-x86_64-rhel62-3.0.4 mongodb-linux-x86_64-rhel62-
- 编程之美-最短摘要的生成
bylijinnan
java数据结构算法编程之美
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class ShortestAbstract {
/**
* 编程之美 最短摘要的生成
* 扫描过程始终保持一个[pBegin,pEnd]的range,初始化确保[pBegin,pEnd]的ran
- json数据解析及typeof
chengxuyuancsdn
jstypeofjson解析
// json格式
var people='{"authors": [{"firstName": "AAA","lastName": "BBB"},'
+' {"firstName": "CCC&
- 流程系统设计的层次和目标
comsci
设计模式数据结构sql框架脚本
流程系统设计的层次和目标
 
- RMAN List和report 命令
daizj
oraclelistreportrman
LIST 命令
使用RMAN LIST 命令显示有关资料档案库中记录的备份集、代理副本和映像副本的
信息。使用此命令可列出:
• RMAN 资料档案库中状态不是AVAILABLE 的备份和副本
• 可用的且可以用于还原操作的数据文件备份和副本
• 备份集和副本,其中包含指定数据文件列表或指定表空间的备份
• 包含指定名称或范围的所有归档日志备份的备份集和副本
• 由标记、完成时间、可
- 二叉树:红黑树
dieslrae
二叉树
红黑树是一种自平衡的二叉树,它的查找,插入,删除操作时间复杂度皆为O(logN),不会出现普通二叉搜索树在最差情况时时间复杂度会变为O(N)的问题.
红黑树必须遵循红黑规则,规则如下
1、每个节点不是红就是黑。 2、根总是黑的 &
- C语言homework3,7个小题目的代码
dcj3sjt126com
c
1、打印100以内的所有奇数。
# include <stdio.h>
int main(void)
{
int i;
for (i=1; i<=100; i++)
{
if (i%2 != 0)
printf("%d ", i);
}
return 0;
}
2、从键盘上输入10个整数,
- 自定义按钮, 图片在上, 文字在下, 居中显示
dcj3sjt126com
自定义
#import <UIKit/UIKit.h>
@interface MyButton : UIButton
-(void)setFrame:(CGRect)frame ImageName:(NSString*)imageName Target:(id)target Action:(SEL)action Title:(NSString*)title Font:(CGFloa
- MySQL查询语句练习题,测试足够用了
flyvszhb
sqlmysql
http://blog.sina.com.cn/s/blog_767d65530101861c.html
1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR
- 转:MyBatis Generator 详解
happyqing
mybatis
MyBatis Generator 详解
http://blog.csdn.net/isea533/article/details/42102297
MyBatis Generator详解
http://git.oschina.net/free/Mybatis_Utils/blob/master/MybatisGeneator/MybatisGeneator.
- 让程序员少走弯路的14个忠告
jingjing0907
工作计划学习
无论是谁,在刚进入某个领域之时,有再大的雄心壮志也敌不过眼前的迷茫:不知道应该怎么做,不知道应该做什么。下面是一名软件开发人员所学到的经验,希望能对大家有所帮助
1.不要害怕在工作中学习。
只要有电脑,就可以通过电子阅读器阅读报纸和大多数书籍。如果你只是做好自己的本职工作以及分配的任务,那是学不到很多东西的。如果你盲目地要求更多的工作,也是不可能提升自己的。放
- nginx和NetScaler区别
流浪鱼
nginx
NetScaler是一个完整的包含操作系统和应用交付功能的产品,Nginx并不包含操作系统,在处理连接方面,需要依赖于操作系统,所以在并发连接数方面和防DoS攻击方面,Nginx不具备优势。
2.易用性方面差别也比较大。Nginx对管理员的水平要求比较高,参数比较多,不确定性给运营带来隐患。在NetScaler常见的配置如健康检查,HA等,在Nginx上的配置的实现相对复杂。
3.策略灵活度方
- 第11章 动画效果(下)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- FAQ - SAP BW BO roadmap
blueoxygen
BOBW
http://www.sdn.sap.com/irj/boc/business-objects-for-sap-faq
Besides, I care that how to integrate tightly.
By the way, for BW consultants, please just focus on Query Designer which i
- 关于java堆内存溢出的几种情况
tomcat_oracle
javajvmjdkthread
【情况一】:
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm-arg>-Xms3062m</jvm-arg> <jvm-arg>-Xmx
- Manifest.permission_group权限组
阿尔萨斯
Permission
结构
继承关系
public static final class Manifest.permission_group extends Object
java.lang.Object
android. Manifest.permission_group 常量
ACCOUNTS 直接通过统计管理器访问管理的统计
COST_MONEY可以用来让用户花钱但不需要通过与他们直接牵涉的权限
D