首页 > 其他分享 >vue3 语法测试

vue3 语法测试

时间:2024-05-31 21:22:06浏览次数:25  
标签:ftwo log value 语法 let 测试 vue3 console ref

Home.vue

<template>
  <div class="home">
    <div>
      {{ fone }}
    </div>


    <div>
      {{ ftwo }}
    </div>

    <div>
      {{ ffour }}
    </div>

    <div>
      {{ ffive }}
    </div>
    <HelloWorld @toFatherThing="getChildThing" msg="Welcome to Your Vue.js + TypeScript App" v-model="fsix" />
    <div>
      {{ fsix }}
    </div>


    <div>
      {{ fseven }}
    </div>


    <div>
      <ul>
        <li v-for="item in feight">{{ item.name }}</li>
      </ul>
    </div>

    <div>{{ ften }}</div>


    <div>{{ aOne }}</div>
    <div>{{ aTwo }}</div>
    
    <!-- 成功渲染render子组件 -->
    <MyRender msg="msg" msg2="msg2"/>
  </div>
</template>

<script lang="ts" setup>
import HelloWorld from "../components/HelloWorld"
import MyRender from "../components/myRender"
import { onUpdated, onMounted, onBeforeUnmount, onUnmounted, onBeforeMount, computed, watchEffect, watch, ref, unref, reactive, shallowRef, shallowReactive, defineComponent, defineOptions, toRefs } from "vue"

import {myAbcHook} from "./homeHook"

//定义组件的一些配置
defineOptions({
  name: 'Home'
})

//ref 定义基本数据类型
const foneRef = ref('slkfjsklfdjskfd')

const fone = unref(foneRef) //获取ref的value

const ftwo = reactive({
  a: {
    b: {
      c: 'sdlfjslfkjsdf'
    }
  },
  a2: "sldfkjsklfjslkfj"
})

setTimeout(() => {
  ftwo.a.b.c = "3424234242342423"
  // ftwo.a2="slkfjlskdjflksfd"
}, 1000);

// watchEffect(()=>{
//    console.log(ftwo.a2,"ftwo-effect")  
// })

// watchEffect(()=>{
//    console.log(ftwo,"ftwo-ccc-effect")  
// })

watchEffect(() => {
  console.log(ftwo.a.b.c, "ftwo-abc-effect")  //可以监听到,说明watchEffect实现了深度监听
})


let fthree = toRefs(ftwo)

console.log(ftwo, "ftwo") //proxy 代理对象
console.log(fthree, "fthree") //返回一个对象,使用对象属性都通过ref实现监听


const ffourSref = shallowRef({
  a: {
    b: {
      c: 'sdkflsjdflkjsfd'
    }
  },
  a2: "before"
})

let ffour = unref(ffourSref)

setTimeout(() => {
  ffour.a.b.c = "changed"  //页面渲染没变,说明shallowRef不是深度监听

  ffour.a2 = "now" //也无法改变说明shallowRef只能监听基本的数据类型

}, 1000)


let ffive = shallowReactive({ //浅监听,只对第一层的引用类型进行监听
  a: {
    b: {
      c: "sdfkjsldsfjsdf"
    }
  },
  a2: "slkfjslksdf"
})

setTimeout(() => {
  ffive.a.b.c = "cccccc"//无法改变,说明shallowReactive 只能监听到直接的引用类型第一层
  // ffive.a2="now"
}, 1000)


let fsix = ref<string>()


function getChildThing(val) {
  console.log(val, "val") //获取子组件事件传过来的值
}


let feight = reactive([{
  id: 0,
  name: 'sfksjdf'
}, {
  id: 1,
  name: 'neuvodsksf'
}, {
  id: 2,
  b: {
    c: {
      d: 2342342
    }
  }
}])

setTimeout(() => {
  // feight[1].name="now"
  feight[2].b.c.d = 4056805468049
}, 1000)

watchEffect(() => {
  console.log(feight, "feight_sdfklsjdflsf") //上面的更改也监听到了,说明watchEffect 对数组也是深度监听
})

watch(feight, () => {
  console.log(feight, "feight")
})

let wone = ref('ksjldfkjsfd')

setTimeout(() => {
  wone.value = "34234242"
}, 1000)

watch(wone, (value, old) => {
  console.log(value, "wone") //直接获取到值
})

watchEffect(() => {
  console.log(wone, "effect")
  console.log(wone.value, "effect") //这样才能打印出来,这样才能监听到
})

let cone = computed(() => {
  return wone.value
})

console.log(cone, "cone")
console.log(cone.value, "cone_value") //类似ref需要通过value访问


onBeforeMount(() => {
  console.log('onBeforeMount')
})
onMounted(() => {
  console.log('onMounted')
})
onBeforeUnmount(() => {
  console.log('onBeforeUnmount')
})
onUnmounted(() => {
  console.log('onUnmounted')
})

let ften = ref(11111)
onUpdated(() => {
  console.log("onUpdated") //在数据都更新到dom之后才执行,说明是异步的任务
})

setTimeout(() => {
  ften.value = 2222   //这里修改后,dom执行完成后会再次触发onUpdated
}, 3000)


//测试自定义hooks使用,自定义hook类似utils功能,都是hook可以通用组件的钩子和生命周期等
let {aOne,aTwo}=myAbcHook(9999)


</script>

<style lang="scss">
.home {
  width: 50vw;
  position: relative;
  margin: 0 auto;
}
</style>

子组件Helloworld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>


    <div>
      <input type="text" v-model="model">
    </div>

    <div>
      <button @click="fn1">child btn</button>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { ref, unref, reactive, shallowRef, shallowReactive, defineComponent, defineOptions, toRefs, defineEmits, defineModel } from "vue"


defineProps<{
  msg: string,
  value: string
}>()

const model = defineModel() //vue3 vmodel实现方式


const emit = defineEmits(['toFatherThing']) //emit 实现


let val = 0
function fn1() {
  emit('toFatherThing', val++)
}



</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
  margin: 40px 0 0;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: inline-block;
  margin: 0 10px;
}

a {
  color: #42b983;
}
</style>

子组件myRender.tsx 写法尝试

import { h, defineComponent } from "vue";
export default defineComponent({
  name: "MyRender",
  props: {
    msg: {
      type: String,
      default: "这是子组件render",
    },
  },
  setup(props, context) {
    const { msg } = props;

    // 透传 Attributes(非响应式的对象,等价于 $attrs)
    console.log(context.attrs);

    // 插槽(非响应式的对象,等价于 $slots)
    console.log(context.slots);

    // 触发事件(函数,等价于 $emit)
    console.log(context.emit);

    // 暴露公共属性(函数)
    console.log(context.expose);

    console.log(context, "context");
    console.log(context.attrs, "attrs"); //可以获取到组件标签的属性值,但是如果被props读取后,这个属性值就不会在attrs里面了,attrs是一个对象
    console.log(context.attrs.msg2, "msg2"); //可以打印到msg2这个属性值

    return {
      msg,
    };
  },
  render() {
    console.log(this.$props.msg, "props_msg"); //这里可以直接通过this访问到props slots
    return [h("div", this.msg)];
  },
});

标签:ftwo,log,value,语法,let,测试,vue3,console,ref
From: https://www.cnblogs.com/jocongmin/p/18225299

相关文章

  • vue3组件通信与props
    title:vue3组件通信与propsdate:2024/5/31下午9:00:57updated:2024/5/31下午9:00:57categories:前端开发tags:Vue3组件Props详解生命周期数据通信模板语法CompositionAPI单向数据流Vue3组件基础在Vue3中,组件是构建用户界面的基本单位,它们是可复用......
  • java期末练习题,设计教师类,完成教授,副教授,讲师三个类的定义,在完成相应的测试。
        教授的基本工资为5000元,每学时补贴70元;     副教授的基本工资为3500元,每学时补贴60元;     讲师的基本工资2600元,每学时补贴55元。     已知每个教师的学时数,计算每个教师的每月工资数。输入1对应教授。输入2对应副教......
  • 【ROS参数详解】——ros应用中的常见的ros语法参数详解
    文章目录前言1.关于ros::Raterate()和rate.sleep()的使用和理解2.ros::spin()、ros::spinOnce():使用细节、区别3.时间戳和浮点格式转换4.subsribe的参数详解5.ROS中NodeHandlenh与NodeHandlenh(“~“)区别6.ros中的param参数服务器说明7.PCL的点云数据的各种转......
  • 记录一下LogicFlow流程图在vue3中的简单使用,配置左侧菜单工具栏和右键菜单
     最终的效果配置画布首先通过npm安装LogicFlownpminstall@logicflow/core--save在vue页面引用LogicFlow和cssimportLogicFlowfrom"@logicflow/core";import"@logicflow/core/dist/style/index.css"; 创建div容器并添加ref<divid="container"ref=......
  • JavaScript语法(二):你知道哪些JavaScript语句?
    我们在上一节课中已经讲过了JavaScript语法的顶层设计,接下来我们进入到更具体的内容。JavaScript遵循了一般编程语言的“语句-表达式”结构,多数编程语言都是这样设计的。我们在上节课讲的脚本,或者模块都是由语句列表构成的,这一节,我们就来一起了解一下语句。在JavaScrip......
  • [ubuntu18.04]搭建mptcp测试环境说明
    MPTCP介绍MultipathTCP—MultipathTCP--documentation2022documentation安装ubuntu18.04,可以使用虚拟机安装点击安装VMwareTool桌面会出现如下图标双击打开VMwareTools,复制如下图所示的文件到Home目录打开终端,切换到管理员权限(如果忘记管理员密码可以使用su......
  • JavaScript语法(四):新加入的**运算符,哪里有些不一样呢?
    上一节我们已经给你介绍了表达式的一些结构,其中关于赋值表达式,我们讲完了它的左边部分,而留下了它右边部分,那么,我们这节课一起来详细讲解。在一些通用的计算机语言设计理论中,能够出现在赋值表达式右边的叫做:右值表达式(RightHandSideExpression),而在JavaScript标准中,规定了在等......
  • 手写HTML字符串解析成对应的 AST语法树
    先看效果展示如下:HTML模版转成ast语法树后在学习之前,我们需要了解这么一个问题,为什么要将HTML字符串解析成对应的AST语法树。为什么?语法分析:HTML字符串是一种标记语言,其中包含了大量的标签、属性、文本等内容。通过解析HTML字符串,可以将其转换为更易于操作和理解的......
  • 如何使用Rayder组织编排漏洞侦查和渗透测试工作流
    关于RayderRayder是一款针对漏洞网络侦查和渗透测试自动化工作流工具,该工具本质上是一个命令行工具,旨在帮助广大研究人员更轻松地组织、编排和执行漏洞侦查和渗透测试工作流。Rayder允许我们在YAML文件中定义一系列功能模块,且每个模块都由要执行的命令所组成。Rayder可以帮......
  • telnet HTTP测试步骤、遇到的问题和解决方法(cmd窗口)
    **本篇文章食用的简单说明**本篇文章为使用cmd窗口进行telnetHTTP测试步骤以及遇到的问题和解决方法。其中在解决方法中有文字版和图片版,文字版图片版自己选择一种查看就好(有标注)。目录点击想要查看的部分即可跳转到对应位置。目录**本篇文章食用的简单说明**---------......