Uniapp 开发 ①(快速上手)

请添加图片描述

@作者 : SYFStrive

 
请添加图片描述

@博客首页 : HomePage

📜: UNIAPP开发

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗

💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞

请添加图片描述
相关专栏

👉 微信小程序(🔥)
👉 UNIAPP开发(🔥)

前言

现在,越来越多的人逐渐接受使用TypeScript开发Vue项目的方式。同时,Uni-app作为跨平台开发框架变得越来越受欢迎。Vue3也上市了,提供了许多有用的新功能。Vite是对现代化前端工具的新尝试,它提供了一种新的打包方式,与webpack不同,它使用了浏览器本身更简单的javascript导入。本文将基于Unu-app、Vue3、TypeScript和Vite为基础,搭建一项目。

所需NPM包

npm install axios sass node-sass vuex @dcloudio/uni-ui
npm install axios sass node-sass pinia @dcloudio/uni-ui

@dcloudio/uni-ui 配置easycom

官方连接 : https://uniapp.dcloud.net.cn/co
说明 :使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom

// pages.json
{
	"easycom": {
		"autoscan": true,
		"custom": {
			// uni-ui 规则如下配置
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
		}
	},
	
	// 其他内容
	pages:[
		// ...
	]
}

在这里插入图片描述

使用官方提供的CLI模板

安装和初始化UNIAPP

  1. 首先,我们需要安装uni-app。可以使用以下命令进行安装 👇

命令 npm install -g @vue/cli

  1. 接下来,我们通过Vue CLI创建一个基于uni-app的项目:

vue create -p dcloudio/uni-preset-vue my-project

这里可能报错,需要把 github uni-preset-vue 下载到本地然后替换 👇
uni-preset-vue 地址 : https://github.com/dcloudio/uni-preset-vue
替换的路劲 :vue create -p D:\uni-preset-vue my-project
参考官方 : https://uniapp.dcloud.net.cn/quickstart5

在这里插入图片描述

网络请求Promise化封装

1. 文件目录规范

在这里插入图片描述

2. 封装请求拦截器

封装请求拦截器 ~ 代码演示

// 引入axios
import axios from "axios";

let requests = axios.create({
	//基础路径
	baseURL: "/api",
	//请求不能超过3S
	timeout: 3000,
});

// 请求拦截器
requests.interceptors.request.use((config) => {
	config.header = {}
	return config
}, error => { // 可使用async await 做异步操作
	return Promise.reject(error)
})

// 响应拦截器
requests.interceptors.response.use((res) => {
	if (response.data.code === 200) {
		// XXX
	} else if (response.data.code === 401) {
		// XXX
		return Promise.reject(response.data)
	}else{
		// XXX
		return Promise.reject(response.data)
	}
	return res.data
}, error => {
	return Promise.reject(error)
})
export default requests;

3. 使用 API

使用 ~ 代码演示

// 引入request ajax请求
import requestsAjax from "./Ajax/ajax";

// 获取数据
export const GetData = () => {
    return requestsAjax({ url: '地址', method: '请求方式' })
}

Vue3 将数据挂载上全局对象 And 获取全局对象数据

~ 注意 支持H5,不支持小程序

  • 这里我单独创建了脚本用于挂载全局数据 RegisterGlobalData

专门用来注挂载全局数据脚本 ~ 代码演示

import axios from "axios";
import * as echarts from 'echarts'
import mitt from 'mitt'

const GlobalObj = {
    axios,
    echarts,
    $bus:new mitt()
}

const GlobalRegisterData = (app)=>{
    app.config.globalProperties = GlobalObj
}

export default GlobalRegisterData
  • 对应的获取数据脚本 GetGlobalData

获取数据脚本全局数据脚本 ~ 代码演示

import {getCurrentInstance} from 'vue'

const GetGlobalData = () => {
    let {appContext:{config:{globalProperties}}} = getCurrentInstance()
    return globalProperties
}

export default GetGlobalData
  • Main 注册

在这里插入图片描述

Vue3 对 vuex进行二次封装

封装代码

hooks/VueX ~ 代码演示

import {useStore} from 'vuex'
import {computed, onMounted, reactive, ref} from 'vue'
import {mapActions, mapMutations, mapState, mapGetters} from 'vuex'

let store = null

const initialize = ()=>{
	if (store === null) store = useStore() //获取到store对象
}

const mapActionsFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeActionsFns = mapActions(mapper)
    const actionsData = {}
    const thisObj = {$store: store}
    Object.keys(storeActionsFns).forEach(item => {
        const fn = storeActionsFns[item].bind(thisObj) //给函数绑定this
        actionsData[item] = fn
    })
    return actionsData
}

const mapMutationsFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeMutationsFns = mapMutations(mapper)
    const mutationsData = {}
    const thisObj = {$store: store}
    Object.keys(storeMutationsFns).forEach(item => {
        const fn = storeMutationsFns[item].bind(thisObj) //给函数绑定this
        mutationsData[item] = fn
    })
    return mutationsData
}
const mapStateFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeStateFns = mapState(mapper)
    const storeData = {}
    const thisObj = {$store: store}
    Object.keys(storeStateFns).forEach(item => {
        const fn = storeStateFns[item].bind(thisObj) //给函数绑定this
        storeData[item] = computed(fn)
    })
    return storeData
}
const mapGetterFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeGettersFns = mapGetters(mapper)
    const getterData = {}
    const thisObj = {$store: store}
    Object.keys(storeGettersFns).forEach(item => {
        const fn = storeGettersFns[item].bind(thisObj) //给函数绑定this
        getterData[item] = computed(fn)
    })
    return getterData
}

export {
	initialize,
    mapActionsFun,
    mapMutationsFun,
    mapStateFun,
    mapGetterFun,
}

Store管理

在这里插入图片描述

Store ~ 代码演示

import { createStore } from 'vuex'

//导入store模块
import login from './login/index.js'

const stores = createStore({
    modules: {
		login,
    }
})

export default stores

login ~ 代码演示

// 引入ShopCart请求服务器数据
import {} from '@/api/api'

const actions = {

}
const mutations = {

}
const state = {
	
}
const getters = {

}

export default {
    actions, mutations, state, getters
}

最后

在这里插入图片描述
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪

 

                 相关专栏连接🔗

在这里插入图片描述

下篇文章再见ヾ( ̄▽ ̄)ByeBye

在这里插入图片描述

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SYFStrive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值