todoList
,如下所示:
// App.vue
<template>
<div>
<input v-model="inputValue" />
<button class="button" @click="handleAddItem">提交</button>
</div>
<ul>
<list-item
v-for="(item, index) in list"
:key="index"
:msg="item"
/>
</ul>
</template>
<script>
import { reactive, ref } from 'Vue';
import ListItem from './components/ListItem';
export default {
name: 'App',
components: { ListItem },
setup() {
const inputValue = ref('');
const list = reactive([]);
const handleAddItem = () => {
list.push(inputValue.value);
inputValue.value = '';
};
return { handleAddItem, inputValue, list }
}
}
</script>
<style>
.button {
margin-left: 20px;
color: red;
}
</style>
// ListItem.vue
<template>
<li>{{ msg }}</li>
</template>
<script>
export default {
name: 'ListItem',
props: {
msg: String
}
}
</script>
<style>
</style>
路由是指根据 url
的不同,展示不同的内容。import
是异步加载路由,router-link
是跳转路由的标签,router-view
负责展示当前路由对应的组件内容,如下所示:
<template>
<div id="nav">
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-link to="/login">Login</router-link>
</div>
<router-view />
</template>
<style></style>
Vuex
数据管理框架,Vuex
创建了一个全局唯一的仓库,用来存放全局的数据。mutation
里面只允许写同步代码,不允许写异步代码。commit
和 mutation
做关联,dispatch
和 actions
做关联。想改变数据,vuex
要求第一步,dispatch
方法,必须派发一个 action
,名字叫做 change
。第二步,store
感知到触发了一个叫做 change
的 action
,执行 store
中 actions
下面的 change
。第三步,commit
提交一个叫做 change
的数据改变,mutation
。第四步,对应的 mutation
感知到提交的 change
改变,执行 change
方法改变数据,如下所示:
// store index.js
import { createStore } from 'vuex'
export default createStore({
state: {
name: 'Tom'
},
mutations: {
change(state, str) {
state.name = str;
}
},
actions: {
change(store, str) {
setTimeout(() => {
store.commit('change', str)
}, 2000)
}
},
modules: {
}
})
<template>
<div class="home">
<h1>{{myName}}</h1>
</div>
</template>
<script>
export default {
name: 'Home',
computed: {
myName() {
return this.$store.state.name;
}
},
methods: {
handleClick() {
this.$store.dispatch('change');
// this.$store.commit('change', 'hello world')
}
}
}
</script>
<style>
</style>
CompositionAPI
中结合 axios
使用 Vuex
,如下所示:
// store index.js
import { createStore } from 'vuex'
import axios from 'axios';
export default createStore({
state: { name: 'Tom' },
mutations: {
changeName(state, str) {
state.name = str;
}
},
actions: {
getData(store) {
axios.post('www.baidu.com').then((response) => {
const msg = response.data.message;
store.commit('changeName', msg)
})
/**
setTimeout(() => {
store.commit('changeName', 'hello')
}, 2000)
**/
}
}
})
<template>
<div class="about">
<h1 @click="handleClick">page</h1>
<h1>{{name}}</h1>
</div>
</template>
<script>
import { toRef } from 'vue';
import { useStore } from 'vuex';
export default {
name: 'Home',
setup() {
const store = useStore();
const { name } = toRefs(store.state);
const handleClick = () => {
store.dispatch('getData')
}
return { name, handleClick }
}
}
</script>
<style>
</style>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)