快捷搜索: 王者荣耀 脱发

Vue3.x的设计理念-Vue3导读

VUE-NEXT【vue3】

// 安装vue3依赖
npm install vue@next

vue3+ts环境配置之后会单独写篇文章,这里就不赘述了。

VUE-NEXT最核心的变更

    拥抱JSX【标准】 Typescript【Vue3+TS结合的非常紧密,用起来非常方便,TS在VUE的舞台有非常强大的生命力】 Composition API【让我们的系统可以以更好的方式进行组合】 Reactivity【对响应式的支持】

Why not SFC?【单文件组件】

    理由1:SFC经过了努力但是没有称为标准(JSX已经成为标准)
// ts 不认识.vue的DefineComponent需要一个shim文件
declare module "*.vue" {
    import { DefineComponent } from "vue";
    const Component: DefineComponent;
    export default Component;
}
<template>
function useCounter(): [Ref<number>, () => void] {
    const counter = ref(0)
    function increment() {
        counter.value++    
    }
    return [counter, increment]
}
export default {
    setup() {
        const [counter, increment] = useCounter()
        return () => <div>
        	count is : {counter.value}
         <button onClick= {increment}>add</button>
         </div> 
    }
}

思考

Composition API

    定义组件 setup【初始化组件】 defineComponent【定义组件】 Reactivity【用于响应式的支持】 ref reactive toRefs computed watch/watchEffect

生命周期钩子变化

    Options API Hook inside 【setup】 beforeCreate Not needed* created Not needed* beforeMount onBeforeMount mounted onMounted beforeUpdate onBeforeUpdate updated onUpdated beforeUnmount onBeforeUnmount unmounted onUnmounted errorCaptured onErrorCaptured renderTracked onRenderTracked renderTriggered onRenderTriggered activated onActivated deactivated onDeactivated

需要知道什么时候绘制DOM吗?

我们学会vue3之后还需要这些生命周期钩子吗?

什么是响应式(Reactivity)

    类型响应环境变化 发生变化,类型不关心谁响应,只是向外暴露自己的变化(事件)

观察者模式【不耦合】

Reactive值

    响应式(Reactive)值专注计算逻辑的表达,不关心渲染细节 响应式大大降低了程序的耦合

Proactive vs Reactive

    主动(proactive)关系中,A必须拥有B的实例【耦合】 响应(reactive)关系中,A、B可以不必知道对方存在【解耦】

声明式程序

const arr = []
for(let i = 0;i < 10000; i++) {
    arr[i] = i
}
// 声明式
const arr = range(0, 10000)

写程序是为了阅读,其次才是执行

声明式程序:创造语言

const div = document.createElement(div)
div.style.width = 100
// 声明式
const div = <div style={
         
  {width: 100}} />

声明式程序:Reactive

function useLoginStatus() {
    const logined = ref(userStore.logined())
    
    userStore.on(e) {
        switch(e.type) {
            case "logined":
                logined.value = true
                break
             case "logout":
                 logined.value = false
                 break        
        }    
    }
    return logined
}
export default {
    setup() {
        const loggedIn = useLoginStatus()
        return ()=> <logginStatus loggedIn = {loggedIn} />    
    }
}

const LogginStatus = ({loggedIn}) => {
    if(loggedIn.value) {
        return <div>您好!欢迎光临</div>    
    } else {
         return <div>请登录......</div>       
    }
}

小结:常见误区

1.分不清:从前端看:怎么理解Reactivity?和React是一个词义吗?说的都是响应式

2.分不清:组合能力是什么?Composition API提供更好的组合能力,这样说对吗?

整个说法是成立的。

组合能力就是将不同的组件组合在一起工作的能力。

每个组件应该做到更小的粒度。

可以细化到一个按钮。

整个逻辑的拼装复用。

不只是视图还有效果【副作用】

经验分享 程序员 微信小程序 职场和发展