首页 > 其他分享 >Vue3开发新范式,不用`ref/reactive`,不用`ref.value`

Vue3开发新范式,不用`ref/reactive`,不用`ref.value`

时间:2024-05-16 11:51:42浏览次数:25  
标签:Cabloy counter 不用 value reactive Front ref

什么是Cabloy-Front?

Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架。不用ref/reactive,不用ref.value,不用pinia

与UI库的配合

Cabloy-Front 可以搭配任何 UI 库使用,并且内置了几款 UI 库的项目模版,便于开箱即用,包括:

  • antdv
  • element-plus
  • quasar
  • vuetify

特性

Cabloy-Front 为 Vue3 引入了以下鲜明特征:

  • 不用ref/reactive:因为在大多数场景下,不需要使用 ref 和 reactive
  • 不用ref.value:因为在 Cabloy-Front 中定义响应式变量更加直观,不再需要 ref 语义
  • 不用pinia:因为 Cabloy-Front 提供了 IOC 容器,可以更加灵活的定义和使用全局对象

动图演示

No ref/reactive

演示:不用ref/reactive,不用ref.value

1. 定义响应式状态

@Local()
export class MotherPageCounter extends BeanMotherPageBase {
  counter: number = 0;

  inrement() {
    this.counter++;
  }

  decrement() {
    this.counter--;
  }
}

2. 使用响应式状态

@Local()
export class RenderPageCounter extends BeanRenderBase {
  render() {
    return (
      <div>
        <div>counter(ref): {this.counter}</div>
        <button onClick={() => this.inrement()}>Inrement</button>
        <button onClick={() => this.decrement()}>Decrement</button>
      </div>
    );
  }
}

演示:依赖注入

1. 逻辑抽离

counter逻辑抽离出来,创建一个Counter Bean

@Local()
export class LocalCounter extends BeanBase {
  counter: number = 0;

  inrement() {
    this.counter++;
  }

  decrement() {
    this.counter--;
  }
}

2. 在组件中注入并使用

@Local()
export class MotherPageCounter extends BeanMotherPageBase {
  @Use()
  $$counter: LocalCounter;
}
@Local()
export class RenderPageCounter extends BeanRenderBase {
  render() {
    return (
      <div>
        <div>counter(ref): {this.$$counter.counter}</div>
        <button onClick={() => this.$$counter.inrement()}>Inrement</button>
        <button onClick={() => this.$$counter.decrement()}>Decrement</button>
      </div>
    );
  }
}

框架已开源: https://github.com/cabloy/cabloy-front

标签:Cabloy,counter,不用,value,reactive,Front,ref
From: https://www.cnblogs.com/zhennann/p/18195691

相关文章

  • JavaScript Object valueOf & toString All In One
    JavaScriptObjectvalueOf&toStringAllInOneclassArrayWrapper{arr:number[];constructor(nums:number[]){this.arr=nums;}//✅改写Object内置方法valueOf,返回一个number整数//❓object相加(本质上是object序列化后的string......
  • 【智应数】Singular Value Decomposition
    SVDDef(eigenvalue\eigenvector).Eigenvalue\(\lambda\)andeigenvector\(\bm{v}\)ofmatrix\(A\)satisfy$$A\bm{v}=\lambda\bm{v}.$$Lem1.Let\(M\in\mathbb{R}^{n\timesn}\)isasymmetricmatrix.Let\(\lambda_i\)and\(\bm{u}_i......
  • 【转】[IDEA] 启动报错 Internal error. Please refer to...
    转自:https://blog.csdn.net/liyh722/article/details/136699609 问题原因:java.net.BindException:地址已在使用中:也就是idea启动时需要占用一些端口,但是已经被其它打开的软件占用了。IDE正在本地主机上启动服务器,它将尝试在6942和6991之间的第一个可用端口上进行绑定,如果IDE......
  • 【强化学习】A grid world 值迭代算法 (value iterator algorithm)
    强化学习——值迭代算法代码是在jupyternotebook环境下编写只需要numpy和matplotlib包。此代码为学习赵世钰老师强化学习课程之后,按照公式写出来的代码,对应第四章第一节valueiteratoralgorithm可以做的实验:调整gama值观察策略的变化调整惩罚值(fa)的大小观察......
  • IfcValue
    IfcValue类型定义IfcValue是一种选择类型,用于在更专业的选择类型IFcSimpleValue、IFcMeasureValue和IFcDerivedMeasureValue之间进行选择。IfcSimpleValue简单数据类型的基本定义类型的选择类型。IfcMeasureValueISO10303-41基本度量类型的一种选择类型。BucalDerivedMeasur......
  • Mybatis使用cache-ref需注意的问题
    https://blog.csdn.net/Ewan_/article/details/1298659741.在MapperXML中使用<cache-ref>标签UserCacheMapperXML需要有<cache>标签,如果没有则会爆Exceptioninthread"main"org.apache.ibatis.builder.IncompleteElementException:Nocachefornamespace'......
  • LaTeX cleveref 宏包的用法
    介绍cleveref宏包会自动在我们引用对象时为渲染结果添加类型文字。例如,当我们引用图片时,如果用LaTeX自带的宏\ref{fig:image}去引用,渲染的结果是1。如果我们用cleveref宏包提供的宏\Cref{fig:image}去引用,渲染结果就是Figure1。我们也可以自定义渲染的结果,比如让它......
  • java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBea
    简介前排提示:这个错误一般是由于Spring新版本导致的与其他框架不兼容现象,解决办法一般是升级其他框架版本。使用springboot-3.2.5和myabtis-plus-3.5.0搭建开发环境时,启动Springboot程序时报错,报错信息:点击查看代码java.lang.IllegalArgumentException:Invalidvalu......
  • ValueError: 'a' cannot be empty unless no samples are taken
    Here,Imettheerrormessageasfollows:defmaldroid_noniid(dataset,train_labels,num_users):num_shards,num_imgs=110,120idx_shard=[iforiinrange(num_shards)]dict_users={i:np.array([])foriinrange(num_users)}idxs=np......
  • Object.values()对象遍历
    Object.keys() 对象的遍历 返回给定对象所有可枚举属性的数组;是属性名组成的数组letobj={a:1,b:2,c:3};Object.keys(obj).map((key)=>{console.log(key,obj[key]);}); Object.values() 对象的遍历返回一个给定对象自身的所有属性值的......