下面是关于vue3中hooks的详细讲解及用法教程。
什么是hooks?
在Vue3中,引入了一种新的特性——hooks(钩子函数)。Hooks可以让我们在函数组件中使用state和其他React特性,而不需要使用类组件。与Vue2中options-API不同的是,hooks是基于函数式编程的,它通过函数的方式提供了组件内状态的维护和实现状态的逻辑复用。
hooks的用法
1. useState
useState是Vue3中最基本的hooks,它可以使我们在函数组件中声明状态。
使用方法如下:
import { defineComponent, reactive } from 'vue'
export default defineComponent({
setup() {
const [count, setCount] = useState(0)
return {
count,
setCount
}
}
})
上述code中,首先通过import来引入Vue3中所需要的defineComponent和reactive函数,然后在setup函数中通过useState函数来声明状态count, setCount用来更新状态。
2. useEffect
useEffect可以说是hooks中最常用也是最重要的hooks之一,它可以让我们在函数组件挂载完毕或者组件更新完成后执行一些“副作用”的操作。
使用方法如下:
import { defineComponent, reactive, onMounted, onUpdated } from 'vue'
export default defineComponent({
setup() {
const [count, setCount] = useState(0)
onMounted(() => {
console.log('组件挂载完成')
})
onUpdated(() => {
console.log('状态更新完成')
})
return {
count,
setCount
}
}
})
上述code中,我们通过引入onMounted和onUpdated函数来触发组件挂载完成和状态更新完成的函数,从而实现在组件挂载完成和状态更新完成之后执行一些操作。
示例说明
示例一:向列表中添加数据
我们可以利用useState来实现向列表中添加数据的功能。
<template>
<ul>
<li v-for="todo in todos" :key="todo.text">
{{ todo.text }}
</li>
<input type="text" v-model="text" />
<button @click="addTodo">Add Todo</button>
</ul>
</template>
<script>
import { defineComponent, reactive, useState } from 'vue'
export default defineComponent({
setup() {
const [todos, setTodos] = useState([{ text: 'Learn Vue 3' }])
const [text, setText] = useState('')
const addTodo = () => {
setTodos([...todos, { text }])
setText('')
}
return {
todos,
text,
setText,
addTodo
}
}
})
</script>
上述code中,我们通过useState来声明状态todos和状态text,然后通过addTodo函数来向todos中添加一条todo。
示例二:模拟get请求,获取接口数据
我们可以利用useEffect来模拟get请求,获取接口数据。
<template>
<div>
<ul>
<li v-for="todo in todos" :key="todo.id">{{ todo.title }}</li>
</ul>
</div>
</template>
<script>
import { defineComponent, reactive, useState, useEffect } from 'vue'
export default defineComponent({
setup() {
const [todos, setTodos] = useState([])
useEffect(() => {
const fetchData = async () => {
const response = await fetch(
'https://jsonplaceholder.typicode.com/todos'
)
const json = await response.json()
setTodos(json)
}
fetchData()
}, [])
return {
todos
}
}
})
</script>
上述code中,我们通过fetch模拟了一个get请求,并且在组件挂载完成后将接口数据设置到状态todos中。在实际应用中,我们可以将fetch封装成一个hooks,以便在多个组件中使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3中hooks的简介及用法教程 - Python技术站