一、项目创建

1、检查vue-cli脚手架版本(vue -V),低版本的要更新(npm install @vue/cli -g

2、创建项目(vue create vue3test )

选择default(直接回车enter),初始化项目

3、进入项目文件夹,更新vue版本(vue add vue-next)

4、运行项目(npm run serve)

5、浏览器上访问(http://localhost:8081),初始化页面展示

二、Vue3API

vue3主要是低侵入式的、函数式的 API,需要用到的函数都必须提前引入。例如:引入ref函数:import { ref} from 'vue'

1、setup函数

返回一个对象,则对象的属性将会被合并到组件模板的渲染上下文。

其他所有的引入函数都必须在其内部执行。

创建组件实例,然后初始化 props ,紧接着就调用setup 函数。从生命周期钩子的视角来看,它会在 beforeCreate 钩子之前被调用

<script>
export default {setup(){console.log("steup")},beforeCreate(){console.log("beforeCreate")},created(){console.log("created")}
}
</script>

浏览器打印顺序:

2、响应式系统 API

(1)、ref

接受一个参数值并返回一个响应式且可改变的 ref 对象。ref 对象拥有一个指向内部值的单一属性 .value。主要用于数字、字符串的创建。

动态修改ref对象的值时,需要利用.value去修改。但是setup 返回的 ref 在模板中会自动解开,不需要写 .value。

点击按钮,展示的num的值就会变为9999

<template><div class="hello"><p>{{num}}</p><p>{{str}}</p><button @click="onChange">修改num</button></div>
</template>
<script>import {ref} from 'vue'
export default {setup(){let num = ref(333)let str = ref('fffff');let onChange = ()=>{num.value = 9999;}return{num,str,onChange}}
}
</script>

(2)、reactive

接收一个普通对象然后返回该普通对象的响应式代理。

<template><div class="hello"><p>{{Orville's Ideas and Interests}}</p><button @click="onChange">修改name</button></div>
</template>
<script>import {reactive} from 'vue'export default {setup(){let obj = reactive({name:'tom',age:20});let onChange = ()=>{Orville's Ideas and Interests = "Json";}return{obj,onChange}}}
</script>

(3)、computed

传入一个 getter 函数,返回一个默认不可手动修改的 ref 对象。

当点击按钮时,proNum不变,浏览器会提示‘Write operation failed: computed value is readonly’

<template><div class="hello"><p>{{proNum}}</p><button @click="onChange">修改proNum</button></div>
</template>
<script>import {ref,computed} from 'vue'export default {setup(){const num = ref(5)const proNum = computed(() => num.value + 1)let onChange = ()=>{proNum.value += 10;}return{proNum,onChange}}}
</script>

如果要computed 可以修改值,则需要传入一个拥有 get 和 set 函数的对象,创建一个可手动修改的计算状态。

<template><div class="hello"><p>{{num}}</p><button @click="onChange">修改proNum</button></div>
</template>
<script>import {ref,computed} from 'vue'export default {setup(){const num = ref(1)const proNum = computed({set:(val)=>{num.value = val+10;},get:()=>num.value})let onChange = ()=>{proNum.value = 10;console.log(num)}return{num,onChange}}}
</script>

(4)、readonly

传入一个对象(响应式或普通)或 ref,返回一个原始对象的只读代理。一个只读的代理是“深层的”,对象内部任何嵌套的属性也都是只读的。

点击按钮,浏览器中提示‘Set operation on key "value" failed: target is readonly’

<template><div class="hello"><p>{{readNum}}</p><button @click="onChange">修改readNum</button></div>
</template>
<script>import {ref,readonly} from 'vue'export default {setup(){const num = ref(1)let readNum = readonly(num)let onChange = ()=>{readNum.value = 10;}return{readNum,onChange}}}
</script>

(5)、watch

需要侦听特定的数据源,并在回调函数中执行副作用。默认情况是懒执行的,也就是说仅在侦听的数据源变更时才执行回调。

<template><div class="hello"><p>{{num}}</p><p>{{state.name}}</p><button @click="onChange">修改num-name</button></div>
</template>
<script>import {ref,reactive,watch} from 'vue'export default {setup(){// 侦听一个 reactive  一个数据源const state = reactive({ name: 'tom' });watch(() => state.name,(name, prevName) => {console.log(prevName,name)});// 直接侦听一个 ref   一个数据源const num = ref(1);watch(num, (num, prevNum) => {console.log(prevNum,num)});// 侦听多个数据源watch([num,state], ([num,name], [prevNum,prevName]) => {console.log(prevNum,num+"-----"+prevName.name,name.name)});let onChange = ()=>{state.name = 'Json';num.value =  10;};return{state,num,onChange}}}
</script>

(6)、watchEffect

立即执行传入的一个函数,并响应式追踪其依赖,并在其依赖变更时重新运行该函数。

<template><div class="hello"><p>{{num}}</p></div>
</template>
<script>import {ref,watchEffect} from 'vue'export default {setup(){const num = ref(1);const stop = watchEffect(()=>{console.log(num.value)})setTimeout(()=>{num.value = 10},2000)// 停止侦听  调用stop 浏览器上不会打印 10stop();return{num}}}
</script>

三、生命周期钩子函数

与 2.x 版本生命周期相对应的组合式 API
beforeCreate -> 使用 setup()
created -> 使用 setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted

这些生命周期钩子注册函数只能在 setup() 期间同步使用, 因为它们依赖于内部的全局状态来定位当前组件实例(正在调用 setup() 的组件实例), 不在当前组件下调用这些函数会抛出一个错误。

组件实例上下文也是在生命周期钩子同步执行期间设置的,因此,在卸载组件时,在生命周期钩子内部同步创建的侦听器和计算状态也将自动删除。

<template><div class="hello"><p>{{num}}</p><button @click="onChange">修改num</button></div>
</template>
<script>import {ref,onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted} from 'vue'export default {setup(){onBeforeMount(() => {console.log('onBeforeMount!')});onMounted(() => {console.log('mounted!')});onBeforeUpdate(() => {console.log('onBeforeUpdate!')});onUpdated(() => {console.log('updated!')});onBeforeUnmount(() => {console.log('onBeforeUnmount!')});onUnmounted(() => {console.log('unmounted!')});const num = ref(1);let onChange = ()=>{num.value = 10;};return{num,onChange}}}
</script>

webstrom 运行 vue项目_vue3.0创建项目及API讲解(一)相关推荐

  1. setup factory 创建多个快捷方式_vue3.0创建项目及API讲解(一)

    一.项目创建 1.检查vue-cli脚手架版本(vue -V),低版本的要更新(npm install @vue/cli -g ) 2.创建项目(vue create vue3test ) 选择def ...

  2. ASP.NET报错集合一----.net4.0创建项目后,在iis上部署项目,无法浏览,提示404

    前言:这些错误纯属自己在开发项目的时候遇到的问题,比较有针对性.如果有解决不了的问题,请勿喷. 问题描述: .net4.0创建项目后,在iis上部署项目,无法浏览,提示404 搭建项目的环境: 项目是 ...

  3. @vue/cli3--使用命令创建项目--方法/实例

    原文网址:@vue/cli3--使用命令创建项目--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用实例来介绍vue-cli3如何使用命令来创建项目. 系列文章 Vue-cli2--使 ...

  4. vue ui 可视化界面 创建项目 报错:command failed: yarn --json。。。。。

    清除npm缓存 npm cache clean --force 然后重新启动 vue ui,这次创建项目成功了

  5. 基于vue cli 3.0创建前端项目并安装cube-ui

    前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...

  6. vue 图形化设计工具_Vue: Vue-CLI3.0 创建项目

    真实的开始需要的:开发服务器: 需要http/https协议访问 BaBel: es6转es5,兼容2015年6月之前的浏览器 postcss less sass: 开发高效 esLint: 协作开发 ...

  7. 从0搭建一个Springboot+vue前后端分离项目(一)安装工具,创建项目

    从0搭建一个Springboot+vue前后端分离项目(二)使用idea进行页面搭建+页面搭建 参考学习vue官网文档 https://v3.cn.vuejs.org/guide/installati ...

  8. Vue(八)vue 脚手架、脚手架创建项目示例

    目录 一.vue 脚手架 1. 脚手架搭建项目的步骤 2. 使用 vscode 打开并运行脚手架项目 3. 脚手架文件夹结构(同SPA 4部分) 4. 避免组件间样式冲突 5. 懒加载 二.举例:使用 ...

  9. vue-cli2.0创建项目步骤

    Vue是近两年来比较火的一个前端框架(渐进式框架吧),与reactjs和angularjs三国鼎立,我不是职业前端,做过Vue,了解了一下React,听说过Angluar.我只能这么说,我来晚了,没经 ...

最新文章

  1. iOS 11开发教程(十六)iOS11应用视图之删除空白视图
  2. celeba数据集_Kaggle最新秃头数据集Bald!含20万张图片,江湖传言刷到第一可防脱发()quot;...
  3. 一机一码加密软件_加密软件还有哪些功能?
  4. e几个灯同时亮灭两次verilog_FPGA题及答案
  5. Linux查看设置系统时区
  6. 实数是不是python数据类型_python 基本数据类型
  7. 加速布局无服务器生态,腾讯云与Serverless.com达成全球战略合作!
  8. 6 大技巧帮助初学者快速掌握 JavaScript!
  9. 更换已存在项目的svn的地址
  10. crt脚本怎么添加等待时间_如何在重启或启动时执行命令或脚本 | Linux 中国
  11. pic单片机汇编 c语言,PIC单片机汇编语言指令详解
  12. AM调制时域代码matlab,AM调制的FPGA实现
  13. ubuntu安装使用redis并设置开机启动
  14. 第三章 原位正三和弦的连接
  15. 用Opencv给韦小宝的身份证透视变换
  16. 翻译go项目代码英文注释
  17. keyshot渲染玻璃打光_keyshot8耳机渲染打光教程
  18. 苹果手机怎么清除缓存_手机里的文件如何彻底删除?教你清除缓存的方法
  19. Java入门的第一课
  20. 【跨层注意力:多层次融合】

热门文章

  1. C++ : 矩阵初等行变换,化成最简矩阵
  2. oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限 无法使用sqlplus / as SYSDBA
  3. 点云三角化之后还能贴图嘛_雪糕化了之后重新冷冻还能吃吗?宁波这个实验真相了!...
  4. Cpp 对象模型探索 / 多重继承下基类指针释放子类对象的原理说明(虚析构函数的作用)
  5. NUP2105L CAN BUS总线端口静电保护器件
  6. nodogsplash的内部机制分析
  7. busybox 安装mysql_安装busybox
  8. 数据库综合系列 之 存储过程
  9. 搭建Docker环境---私有仓库registry搭建
  10. 【thinkPHP框架】Failed opening required 'header.php' include_path='.;c:\php5\pear 终级解决方案...