# vue3 比 vue2好,性能提高了,支持ts语法,源码升级,多个一些新的api
# 重点:
	组合式API(vue3)   和  配置项API(vue2)
  
  
  
# 学的所有vue2的东西,可以直接写在vue3上,完全支持
  

Vue3 项目创建

# 创建vue3的项目
	-方式一:使用vue-cli创建
  	-跟创建vue2一模一样
  -方式二:使用vite创建(不需要装任何东西)
    ## 创建工程
    npm init vite-app vue3_test2
    ## 进入工程目录
    cd vue3_test2
    ## 安装依赖
    npm install
    ## 运行
    npm run dev

常用api之setup

# setup 中可以写变量,写函数,只要reurn了,在模版中就可以使用
setup() {
    // 定义变量  const不能改 let 跟var一样
    let name = 'lqz'
    let age = 19  //
    // 定义函数
    function handleAdd(){
      age=age+1    // 数据变了,页面没变
      console.log(age)
    }
    // 要在模版中使用必须,return出去
    return {name,age,handleAdd}
  }

常用api之ref和reactive

# 上面没有响应式:数据变,页面变,页面变数据变

# 基本数据类型使用ref包裹一下,使之变成响应式
在模版中直接使用
在setup中 使用对象.value获取真正的值

# 对象,数组类型,使用reactive包裹
模版中直接使用

计算和监听属性

# computed 配置项完成计算属性
# watch    配置项完成监听属性
以上的照常用

# 推荐使用组合式api

生命周期

# 生命周期变了
vue2 8个生命周期钩子函数
vue3 8个生命周期钩子函数,支持组合式api
    beforeCreate===>setup()
    created=======>setup()
    beforeMount ===>onBeforeMount
    mounted=======>onMounted
    beforeUpdate===>onBeforeUpdate
    updated =======>onUpdated
    ------下面的变了------
    beforeUnmount ==>onBeforeUnmount
    unmounted =====>onUnmounted

toRef

  setup() {

    const data = reactive({
      name: '刘',
      age: '清政',
      isShow:false
    })



    // es6语法中的对象解压
    return {
      ...toRefs(data)  // 解压开,return了
      // name:data.name,
      // age:data.age,
      // isShow:data.isShow,
    }
  }

常见ES6

var/let/const
<script>
    function show(){
        if(1==1){
            var name = "武沛齐";  //函数作用域=Python
        }
        consolo.log(name);
    }
    show();
</script>
<script>
    if(1==1){
    	let age = 19;  // 块级作用域
    }
    console.log(age);
</script>
import { ref } from 'vue'

const info = ref({id: 1, value: 18});
info.value.value = 999;

箭头函数

#  注意:发送网络请求时,回调函数必须要使用箭头函数。
<script>
	function f1(name,age){
        console.log(name,age);
    }
    f1("张开",99);
	
    //箭头函数
    let f2 = (name,age) =>{
        console.log(name,age);
    }
    f2("张开",99);
</script>
<script>
    var name = "源代码";
    let info = {
        name: "武沛齐",
        func: function () {
            console.log(this.name); // 函数内部默认都有this关键字
        }
    }
    info.func();

    function getData() {
        console.log(this.name); // 函数内部默认都有this关键字,this=window
    }

    getData();
</script>
<script>
    var name = "源代码";
    let info = {
        name: "武沛齐",
        func: function () {
            console.log(this.name); // 函数内部默认都有this关键字,this=info对象

            function getData() {
                console.log(this.name); // 函数内部默认都有this关键字,this=window
            }
            getData();
        }
    }
    info.func();
</script>

<script>
    var name = "源代码";
    let info = {
        name: "武沛齐",
        func: function () {
            console.log(this.name); // 函数内部默认都有this关键字,this=info对象

            let getData = () => {
                console.log(this.name); // 函数内部默认都有this关键字
            }
            getData();
        }
    }
    info.func();


</script>

<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
<script>

    let info = {
        data: null,
        send: function () {
            axios({
                method: "post",
                url: "https://api.luffycity.com/api/v1/auth/password/login/?loginWay=password",
                data: {
                    username: "alex",
                    password: "dsb"
                },
                headers: {
                    "content-type": "application/json"
                }
            }).then(function (res) {
                console.log(this,res);
                this.data = res;
            })
        }
    }
    info.send();
</script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
<script>

    let info = {
        data: null,
        send: function () {
            axios({
                method: "post",
                url: "https://api.luffycity.com/api/v1/auth/password/login/?loginWay=password",
                data: {
                    username: "alex",
                    password: "dsb"
                },
                headers: {
                    "content-type": "application/json"
                }
            }).then((res) => {
                console.log(this,res);
                this.data = res;
            })
        }
    }
    info.send();
</script>

关于环境

.先查看本机node.js版本:
	node -v
	
2.清除node.js的cache:
	sudo npm cache clean -f

3.安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具的名字,是他是他就是他,他的名字就是 "n"(科学上网)
	sudo npm install -g n

4.安装最新版本的node.js
	sudo n stable

5.再次查看本机的node.js版本:
	node -v

关于npm

sudo npm install npm@latest -g
npm config set registry https://registry.npm.taobao.org    # npm相当于python的pip  这个的意思就是npm淘宝的镜像

npm install -g cnpm --registry=https://registry.npm.taobao.org  # cnpm:这是要安装的包名,是淘宝团队开发的一个 npm 命令行替代工具

创建项目

  • 命令

vue create mysite1

如果创建项目出现问题可以参照下面方式处理

修复 .npm 目录权限
sudo chown -R $(whoami) ~/.npm
 清理 npm 缓存
npm cache clean --force
可能额外需要设置淘宝镜像(防网络失败)
npm config set registry https://registry.npmmirror.com
如果还是失败,可以手动安装依赖
cd /Users/wen/Desktop/reverse/python/drf/mysite1
npm install --legacy-peer-deps --force

命令创建项目成功如图