首页 前端知识 实践一个Vue 3 TypeScript Vite Pinia项目

实践一个Vue 3 TypeScript Vite Pinia项目

2024-06-07 23:06:11 前端知识 前端哥 813 200 我要收藏

新建一个项目

# 执行新建命令,选择vue vue-ts
yarn create vite vite-pinia-tsx
# 添加 sass 支持
yarn add sass -D
# 支持jsx tsx
yarn add @vitejs/plugin-vue-jsx -D
复制

支持jsx、tsx

新建一个 UserComponent.jsx 文件
UserComponent.jsx

import { defineComponent } from "vue"
export default defineComponent({
// 接收属性
props: {
name: String
},
setup(prop) {
const {name} = prop
return () => <p>user:{name}</p>
}
})
复制

在 app.vue 引入user.tsx
app.vue

<script setup lang="ts">
import UserComponent from './UserComponent'
</script>
<template>
    <!-- 添加模块 -->
    <UserComponent name="小华" />
</template>
复制

直接引入 css scss

import './assets/css/styleDefault.css'
import './assets/css/style.scss'
复制

直接引入json

新建 user.json 文件,并添加数据
user.json

{
"id": 1,
"name": "小洁",
"age": 18
}
复制

在 app.vue 中引入文件并展示
app.vue

<script setup lang="ts">
import user, { age } from './user.json'
</script>
<template>
    <p>
        读取JSON的user数据是:ID:{{ user.id }},姓名:{{ user.name }},年龄:{{
        age
        }}
    </p>
</template>
复制

使用Pinia对数据进行状态管理

优势:dev-tools支持、热模块更换、支持typeScript、插件机制、支持服务端渲染等等

# 安装pinia
yarn add pinia
复制

实现一个简单的增删功能
在 main.ts 引入pinia

// 引入pinia
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from "pinia"
const app = createApp(App)
app.use(createPinia()).mount('#app')
复制

新建文件夹 store,打开新建 index.ts。创建 useUserStore
store/index.ts

import { defineStore } from "pinia";
interface State {
userList: User[]
}
// 定义一个 useUserStore 的数据管理
export const useUserStore = defineStore('user', {
state: () => ({
userList: [
{
id: 1,
name: '小明'
},
{
id: 2,
name: '小芳'
},
]
}),
actions: {
deleteOne(id: number) {
this.userList = this.userList.filter(item => item.id != id);
},
addUser(item:User) {
this.userList.push(item)
}
}
})
复制

app.vue

<script setup lang="ts">
// 适用pinia对数据进行状态管理
import { useUserStore } from './store'
import UserList from './components/UserList'
import { ref } from 'vue'
const userStore = useUserStore() // 这里不能解构赋值,会失去响应式
const newValue = ref('')
const addOne = () => {
  userStore.addUser({
    id: new Date().getMilliseconds(),
    name: newValue.value,
  })
  newValue.value = ''
}
</script>
<template>
  <!-- 适用pinia对数据进行状态管理 -->
  <input type="text" v-model="newValue" @keyup.enter="addOne" />
  <ul>
    <li v-for="user in userStore.userList" :key="user.id">
      <UserList :user="user" />
    </li>
  </ul>
</template>
复制

components/UserList.tsx

import { defineComponent, PropType } from "vue"
import { useUserStore } from "../store";
export default defineComponent({
props: {
user: {
type: Object as PropType<User>,
required: true,
},
},
setup(prop) {
const { user } = prop
const { deleteOne } = useUserStore()
const deleteUser = () => deleteOne(user.id)
return () => <p>{user.name}<button onClick={deleteUser}>删除</button></p>
}
})
复制

git地址:
https://github.com/JackWsjls/vite-pinia-tsx

转载请注明出处或者链接地址:https://www.qianduange.cn//article/11346.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!