Vue3项目创建+组合式API使用+组件通信+渲染微博热搜+打包上线

news2024/12/24 9:45:59

摘要

Vue3的组合式API大大减少了代码量,以及使用也方便了很多,本案例使用Vite创建一个Vue3示例,简单介绍Vue3的组合式API使用以及父传子组件传参示例。

创建Vue3项目

1、首先要安装 Node.js 下载地址:https://nodejs.org/en/download
2、安装完成后,创建一个文件夹,用于创建 Vue 项目,我是在桌面创建的
3、在你创建的文件夹内的路径这一栏,输入 cmd 回车

在这里插入图片描述

即可进入命令行工具,然后输入以下命令,安装 cnpm ,因为是中国大陆,所以使用 cnpm 会比较快。

npm install -g cnpm -registry=https://registry.npm.taobao.org

安装完成后,使用 cnpm 去创建 Vue 项目。输入以下命令:

cnpm create vue@latest

在这里插入图片描述

然后就会让你选择各种选项,大多数是选择否,或者全部选择否。执行完成后,就会让你按顺序执行3次命令,分别是:

cd 项目名
npm install
npm run dev

因为你已经安装了 cnpm ,所以你可以后面需要使用 npm 的时候,改为 cnpm 即:

cd 项目名
cnpm install
cnpm run dev

执行 cnpm run dev 后,就会在你本地开启一个端口,进入到项目的运行。

在这里插入图片描述

在浏览器访问:

http://localhost:5173/

就会打开 Vue 项目:

在这里插入图片描述

这代表你已经成功搭建了一个 Vue3 项目并运行。

上代码

你可以将Vue项目的 view 目录删除,以及 components 里面的所有文件删除, main.css 里面的代码清空,如果你还没使用到路由,也可以将路由相关的代码注释或者删除。

新建 Index.vue 文件

这个是首页组件,这个使用了 axios 发起一个请求,获取微博热搜数据然后渲染。其中每一条的微博热搜都传给 Datacard.vue 组件进行渲染。所以这里通过:

import Datacard from './Datacard.vue';

引入了组件。

因为使用了 axios ,所以你要通过以下命令下载 axios

cnpm install axios

Index.vue

<template>
	<div class="container">
		<img src="https://pic.rmb.bdstatic.com/bjh/485143c0324905053289d1cdf74ff9933901.png" class="topimg" />
		<ul>
			<li v-for="(item,index) in data" :key="item.mid" v-if="data">
				<Datacard :word="item.word" :rawhot="item.raw_hot" :xuhao="index" />
			</li>
			<div v-else class="loading">{{ loading }}</div>
		</ul>
	</div>
</template>

<script setup>

	// 引入ref和onMounted
	import { ref,onMounted } from 'vue';

	// 引入axios
	import axios from 'axios';

	// 引入组件
	import Datacard from './Datacard.vue';

	// 创建响应式的变量初始值设置为null
	const data = ref(null);

	// 还没加载到数据就使用这个变量
	const loading = ref('加载中...');

	// 请求接口获取数据
	const getData = async () => {
		try {
			const response = await axios.get('https://demo.likeyunba.com/getSinawbHotSearch/');

			// 接口返回ok=1就是成功获取到数据
			if(response.data.ok == 1) {
				data.value = response.data.data.realtime;
			}else{
				loading.value = '加载数据失败!';
			}
			
		} catch (error) {
			loading.value = '加载数据失败!';
		}
	};

	// 组件挂载后自动加载
	onMounted(() => {
		getData();
	});
</script>

<style scope>
	*{
		padding: 0;
		margin: 0;
		list-style: none;
		-webkit-tap-highlight-color:rgba(255,0,0,0);
	}

	body {
		background: #FF8200;
	}

	.container .topimg {
		display: block;
		width: calc(100% - 20px);
		border-radius: 20px;
		margin: 0 auto 20px;
	}

	.container ul li {
		padding: 8px;
		border-bottom: 1px solid #eee;
		display: flex;
	}

	.container ul li .word {
		flex: 1;
		font-size: 15px;
	}

	.container ul li .raw_hot {
		flex: 1;
		text-align: right;
		font-size: 15px;
		color: #999;
	}

	.container ul li a {
		text-decoration: none;
		color: #666;
	}

	.container ul li a:hover {
		color: #FF8200;
	}

	.container .loading {
		text-align: center;
		margin: 20px;
	}

	/* PC 设备 - 最小宽度为 1024px */
	@media screen and (min-width: 1024px) {
	    .container {
			width: 800px;
			margin: 30px auto 100px;
			background: #fff;
			padding: 20px;
			border-radius: 20px;
		}
	}

	/* 平板设备 - 宽度在 768px 到 1023px 之间 */
	@media screen and (min-width: 768px) and (max-width: 1023px) {
	    .container {
			width: 600px;
			margin: 30px auto 100px;
			background: #fff;
			padding: 20px;
			border-radius: 20px;
		}
	}

	/* 手机设备 - 最大宽度为 767px */
	@media screen and (max-width: 767px) {
	    .container {
			width: calc(95% - 40px);
			margin: 30px auto 100px;
			background: #fff;
			padding: 20px;
			border-radius: 20px;
		}
	}

</style>

新建 Datacard.vue 文件

组合式API接收父类参数,使用 defineProps 即可,只需要对传过来的参数指定数据类型,然后直接在模板中使用参数。

<template>

	<!-- 渲染参数 -->
	<a :href="'https://s.weibo.com/weibo?q=%23' + word + '%23&t=31&band_rank=1&Refer=top'" target="blank">
		<span class="word"> {{ xuhao+1 }} . {{ word }} </span>
	</a>
	<span class="raw_hot">{{ rawhot }}</span>
</template>

<script setup>

	// 接收参数
	defineProps({
		word: String,
		rawhot: Number,
		xuhao: Number
	})
</script>

App.vue

最后在 App.vue 中引入 Index 组件

<template>
  <Index />
</template>

<script setup>
  import Index from './components/Index.vue'
</script>

最终的代码结构:

在这里插入图片描述

打包上线

打包上线需要通过一个命令编译成浏览器可以运行的 html 代码,因为 .vue 代码是在开发的时候使用的,浏览器无法运行 .vue 文件,所以需要打包,打包就是将 .vue 文件里面的代码编译成浏览器可以解析执行的 html 代码。

在打包前,需要做一个简单的配置,如果你的代码最终会上传到服务器的根目录,无需配置,如果是上传到其他目录,例如二级目录,需要进行配置,例如二级目录名为 vue3-setup-weibo-hotserach ,在 vite.config.js 这个文件加入下面这行代码:

base: process.env.NODE_ENV === 'production' ? '/vue3-setup-weibo-hotserach/' : '/',

完整代码:

vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  base: process.env.NODE_ENV === 'production' ? '/vue3-setup-weibo-hotserach/' : '/',
  plugins: [
    vue(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

打包命令:

cnpm run build

在这里插入图片描述

执行这个命令后就会快速打包。打包完成后,会在你的项目文件夹内出现一个 dist 目录,这个目录里面的代码就是编译后的 html 代码。

在这里插入图片描述

将这些代码上传至服务器。

在这里插入图片描述

在线演示

https://demo.likeyunba.com/vue3-setup-weibo-hotserach/

作者

TANKING

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css-物联网管理界面

效果图&#xff1a; 分享链接&#xff1a; monitor https://www.aliyundrive.com/s/CkLVqXcnJFc 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。

qt 双击可执行文件提示没有平台插件Qt platform plugin

准备打包可执行文件时&#xff0c;双击可执行文件 报错提示&#xff1a; 解决办法&#xff1a; 从qt安装目录下拷贝platforms文件夹&#xff0c;放在你要执行的可执行目录里。

App在哪里可以免费内测分发?

当ios开发者开发完成ios App后&#xff0c;往往要进入内测或公测阶段&#xff0c;需要进行分发&#xff0c;测试用户才能下载应用。 App分发平台是许多app开发类企业经常使用的平台&#xff0c;将主要开发的app上传到app分发平台上进行内测下载。很多开发者服务平台其实是提供…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

一、基本知识 SDRAM : 即同步动态随机存储器&#xff08;Synchronous Dynamic Random Access Memory&#xff09;, 同步是指其时钟频率与对应控制器&#xff08;CPU/FPGA&#xff09;的系统时钟频率相同&#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准&#xff…

Python中if __name__ == ‘__main__‘,__init__和self 的解析

一、 if __name__ __main__ if __name__ __main__的意思是&#xff1a; 当.py文件被直接运行时&#xff0c;if __name__ __main__之下的代码块将被运行&#xff1b; 当.py文件以模块形式被导入时&#xff0c;if __name__ __main__之下的代码块不被运行。 1.1、一个 xxx.p…

面试题复盘-2023/10/20

目录 笔试题面试题&#xff08;未完待续&#xff09; 笔试题 一.多选题 A:map的key是const,不可更改 B:STL中的快速排序比一般的快速排序速度更快&#xff0c;是因为中值排序法 C:list的插入效率是O(1) D:vector的容量只能增大不能减小 解析&#xff1a; B: STL中的sort函数的…

Python教程总结版

目录 1. chr()和ord()的用法 2. input()——读取数据的转换 2.1 int(),float(),list() 数据转换 2.2 split()函数处理多个输入值 2.3 map()强制转换 1. chr()和ord()的用法 for i in range(65, 91): print(chr(i), end) # 控制台输出&#xff1a;ABCDEFGHIJKLMNOPQRSTUV…

关于高并发你必须知道的几个概念

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录高并发必须知道的几个概念&#xff0c;如有出入还望指正。 关注公众…

墨西哥专线港口通航情况

随着全球贸易的不断发展&#xff0c;墨西哥作为拉美地区的重要国家&#xff0c;其港口通航状况对于国际贸易具有重要意义。本文将从墨西哥专线港口的通航现状、通航瓶颈以及未来发展趋势等方面进行分析&#xff0c;以期为墨西哥港口的发展提供一些参考。 一、墨西哥专线港口的通…

使用Linux JumpServer 堡垒机进行远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

有什么不起眼,却很挣钱的副业?

说两个真人真事儿&#xff1a; 1、我有一个表妹,去年生完孩子后,开始在家做视频剪辑工作。 主要是剪辑一些古装剧、家庭剧等视频,然后发布到抖音和快手等短视频平台。 她会把视频剪辑成一集一集的,先发布片段进行推广,如果用户觉得剧情吸引就提示他们可以付费购买全集。 我表妹…

JS:获取当前时间、计算2个时间的相差天数

前言 本文将介绍在js中对时间的一些操作&#xff0c;包括&#xff1a;获取当前的年、月、日&#xff1b;获取指定格式的时间&#xff1b;2个时间的相差天数等 基本操作 在js种可以使用特定的函数&#xff0c;获取当前的年、月、日等时间 date .getYear(); //获取当前年份(2…

动画云渲染要多少钱?云渲染怎么使用?

其实动画云渲染的具体费用会根据所使用的平台、渲染模式、渲染时间等因素而有所不同&#xff0c;具体还是要看你所使用的云渲染平台。下面我们以炫云云渲染为例&#xff0c;告诉你动画云渲染需要多少钱。 炫云云渲染是第一家实现一键云渲染的平台&#xff0c;是最早的一批云渲染…

公司给了个CheckStyle,还给公司一片红润

项目总监在管理项目时&#xff0c;会担心技术人员开发代码不规范的问题。如果人员少口头述说一下就好了。但是人员大呢?比如50人的大团队&#xff0c;如果一个一个去说那肯定不可能。所以就需要借助工具checkstyle了。checkstyle的介绍如下&#xff1a; “CheckStyle是SourceF…

腾讯联手警方重拳出击 《绝地求生》外挂首案告破

12月13日&#xff0c;闲游盒腾讯公司联手无锡江阴警方破获一起利用《绝地求生》游戏外挂非法谋利的重大案件&#xff0c;3名核心涉案犯罪嫌疑人全部落网&#xff0c;并对犯罪事实供认不讳。这是腾讯宣布获得《绝地求生》国服独家代理权以来&#xff0c;破获的首起《绝地求生》外…

整数转罗马数字-----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 直接按照题目模拟过程即可 public String intToRoman(int num) {int []a{1000,900,500,400,100,90,50,40,10,9,5,4,1};String []b{"M","CM","D",&quo…

全志R528代码编译和烧录以及测试

代表编译 代码存在如下目录中:/home/workspace/tina-r528-v1.2 这里输入如下指令进行编译: su root source build/envsetup.sh lunch r528_evb2-tina make & packroottina-virtual-machine:/home/workspace/tina-r528-v1.2# source build/envsetup.sh Setup env done! …

最小生成树专题2 最小生成树-Kruskal算法

题目&#xff1a; 样例1&#xff1a; 输入 4 5 0 1 3 0 2 2 0 3 3 2 3 1 1 2 1 输出 4 样例2&#xff1a; 输入 3 1 0 1 1 输出 -1 思路&#xff1a; 由题意&#xff0c;我们看一下数据&#xff0c;可以知道&#xff0c;朴素版的 最小生成树&#xff0c;是使用 二维数组存储…

【python入门篇】条件表达式、循环(5)

这一章节讲python的条件表达式和循环放在一起来说&#xff0c;条件语句是通过判断条件是否成立&#xff0c;根据条件表达式的结果做出决策&#xff0c;控制不同代码块的执行。循环是一种重复执行某段代码的结构,通常被用于遍历或处理一组数据,或者重复执行一些代码直到满足某个…

设计模式:状态模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《备忘录模式》 下一篇《访问者模式》 简介&#xff1a; 状态模式&#xff0c;它是一种对象行为型模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。这种模式可以让一个对象的行为随着状态的改…