- ref 使用 aaa.value
- reactive 类型是 object
ref 和 reactive 一个针对原始数据类型,而另一个用于对象,这两个API都是为了给JavaScript普通的数据类型赋予响应式特性(reactivity)。
- reactive和ref都是用来定义响应式数据的,而reactive更推荐用来定义对象,ref更推荐定义基础数据类型,但是ref也可以定义数组和对象
- 在访问数据的时候,ref需要使用.value,而reactive不需要
1
| const dataAsRefs = toRefs(data);
|
步子比蛋大
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <template> <div>Hello, {{ name }}!</div> <input v-model="name" /> <button :disabled="!isNamePresent" @click="submitName">Submit</button> </template>
<script setup> import { ref, computed } from 'vue'
const name = ref('') const isNamePresent = computed(() => name.value.length > 0)
function submitName() { console.log(name.value) } </script>
|
父子组件
子组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!-- Form.vue --> <template> <form @submit.prevent="submitHandler"> <label>Name <input type="text" /> </label> <button>Submit</button> </form> </template>
<script setup> function submitHandler() { // Do something } </script>
|
父组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!-- App.vue --> <template> <div>Hello, {{ name }}!</div> <Form /> </template>
<script setup> import { ref } from 'vue' import Form from './components/Form.vue'
const name = ref('')
function submitForm() { console.log(name.value) } </script>
|
defineProps 和 defineEmits
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <!-- Form.vue --> <template> <form @submit.prevent="submitHandler"> <label>Name <input v-model="name" type="text" /> </label> <button>Submit</button> </form> </template>
<script setup> import { computed } from 'vue' const props = defineProps({ modelValue: { type: String, default: '' } }) const emit = defineEmits(['update:modelValue', 'submit']);
const name = computed({ get () { return props.modelValue }, set(val) { emit('update:modelValue', val); } })
function submitHandler() { emit('submit') } </script>
<!-- App.vue --> <template> <div>Hello, {{ name }}!</div> <Form v-model="name" @submit="submitForm" /> </template>
<script setup> import { ref } from 'vue' import Form from './components/Form.vue'
const name = ref('')
function submitForm() { console.log(name.value) } </script>
|