<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title></title>

    <script src="../js/vue.js"></script>

    <style>


    </style>


</head>

<body>


    <div id="root"></div>


    <script>  

        // ref-reactive-toRefs


        // ref reactive 响应式的引用

        // 原理 通过 proxy  对数据进行封装 ,当数据变化时, 触发模板等内容的更新

        // ref 只适合处理 基础的类型数据

        // reactive 处理非基础类型的数据


       var app = Vue.createApp({  


            // 1

            // template:`  

            //    <div > {{name}} </div>    

            // `,  


            // 2

            // template:`  

            //     <div > {{nameObj.name}} </div>    

            // `,  


            // 3

            // template:`  

            //     <div > {{nameObj}} </div>    

            // `,


            // 4

            template:`  

                <div > {{name}} </div>    

            `,


            // created 实例被完全初始化之前

            setup(props,context){


                // 1

                // const { ref } = Vue

                // // proxy, 'Eric' 变成 proxy({value:'dell'})  这样的一个响应式引用

                // let name = ref('Eric');



                // setTimeout(()=>{

                //     name.value = 'lee'

                // },2000);


                // return { name }



                // --------------------


                // 2 基本用法

                // const { reactive } = Vue

                // // // proxy, '{name:"Eric"}' 变成 proxy({name:'Eric'})  这样的一个响应式引用

                // let nameObj = reactive({name:"Eric"});  

                // setTimeout(()=>{

                //     nameObj.name = 'lee'

                // },2000);

                // return { nameObj }



                // 3 只读 readonly

                // const { reactive,readonly } = Vue

                // let nameObj = reactive([123]);  

                // const copyNameObj = readonly(nameObj)

                // setTimeout(()=>{

                //     nameObj[0] = 456

                //     // copyNameObj[0] = 456

                // },2000);  

                // return { nameObj,copyNameObj }



                // 4 toRefs 基本用法

                const { reactive,toRefs } = Vue

                // // proxy, '{name:"Eric"}' 变成 proxy({name:'Eric'})  这样的一个响应式引用

                let nameObj = reactive({name:"Eric"});  

                setTimeout(()=>{

                    nameObj.name = 'lee'

                },2000);


                // toRefs proxy({name:'Eric'}), {name: proxy({value:'Eric'})}

                const {name} = toRefs(nameObj)

                return  { name }  


            }  


        })


        app.mount('#root')


    </script>


</body>

</html>