sleepyShen1989 / blog

MIT License
0 stars 0 forks source link

【实战】Vue3开发注意事项(选项式) #14

Open sleepyShen1989 opened 2 years ago

sleepyShen1989 commented 2 years ago

声明方法、侦听器回调时避免使用箭头函数

watch

样式穿透

// app.vue
<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <div>
    <h1>hello</h1>
  </div>
  <HelloWorld />
</template>

<style scoped>
h1{
  color:blue
}
</style>

// HelloWorld.vue
<template>
  <h1>Hi,World</h1>
</template>
sleepyShen1989 commented 1 year ago

组件通信

禁用Attributes继承

props传值

// 对象类型的默认值
propE: {
  type: Object,
  // 对象或者数组应当用工厂函数返回。
  // 工厂函数会收到组件所接收的原始 props
  // 作为参数
  default(rawProps) {
    return { message: 'hello' }
  }
},

emits

provide

provide() {
  return {
    msg: this.msg
  }
}

import { computed } from 'vue'
provide() {
  return {
    // 显式提供一个计算属性
    // 返回ref对象,使用.value获取
    // computed的值是只读的
    message: computed(() => this.message)  
  }
}
sleepyShen1989 commented 1 year ago

安全

url注入

<template>
<a :href="userProvidedUrl">click me</a>
</template>

<script>
const userProvidedUrl = ref('javascript:alert(1)')
</script>

样式劫持

<a
  :href="sanitizedUrl"
  :style="{
    color: userProvidedColor,
    background: userProvidedBackground
  }"
>
  click me
</a>