zoukankan      html  css  js  c++  java
  • vue3

    总结

    • 获取dom,vue 2中的 ref
      • 在挂载或虚拟 DOM 补丁算法中,如果 VNode 的 ref 键对应于渲染上下文中的 ref,则 VNode 的相应元素或组件实例将被分配给该 ref 的值。(会触发响应吗?)
      • 作为模板使用的 ref 的行为与任何其他 ref 一样:它们是响应式的,可以传递到 (或从中返回) 复合函数中。(这个响应应该只停留在第一层?)
    <template> 
      <div ref="root">This is a root element</div>
    </template>
    
    <script>
      import { ref, onMounted } from 'vue'
    
      export default {
        setup() {
          const root = ref(null)
          onMounted(() => { 
            console.log(root.value) 
          })
          return {
            root
          }
        }
      }
    </script>
    
    <template>
      <div v-for="(item, i) in list" :ref="el => { if (el) divs[i] = el }">
        {{ item }}
      </div>
    </template>
    
    <script>
      import { ref, reactive, onBeforeUpdate } from 'vue'
    
      export default {
        setup() {
          const list = reactive([1, 2, 3])
          const divs = ref([])
          onBeforeUpdate(() => {
            divs.value = []
          })
          return {
            list,
            divs
          }
        }
      }
    </script>
    
    • setup 可以返回 vnode 对象,vue 2中好像不行
    export default {
      setup() {
        const root = ref(null)
    
        return () =>
          h('div', {
            ref: root
          })
    
        // with JSX
        return () => <div ref={root} />
      }
    }
    

    原文地址 v3.cn.vuejs.org

    在使用组合式 API 时,响应式引用模板引用的概念是统一的。为了获得对模板内元素或组件实例的引用,我们可以像往常一样声明 ref 并从 setup() 返回:

    注释:响应式引用是指通过 ref 等包装后的对象的引用,模板引用是指 ref 绑定捕获 dom 元素

    <template> 
      <div ref="root">This is a root element</div>
    </template>
    
    <script>
      import { ref, onMounted } from 'vue'
    
      export default {
        setup() {
          const root = ref(null)
    
          onMounted(() => {
            
            console.log(root.value) 
          })
    
          return {
            root
          }
        }
      }
    </script>
    

    这里我们在渲染上下文中暴露 root,并通过 ref="root",将其绑定到 div 作为其 ref。在虚拟 DOM 补丁算法中,如果 VNode 的 ref 键对应于渲染上下文中的 ref,则 VNode 的相应元素或组件实例将被分配给该 ref 的值。这是在虚拟 DOM 挂载 / 打补丁过程中执行的,因此模板引用只会在初始渲染之后获得赋值。

    注释:2.0中 vnode 不包含 ref 属性

    作为模板使用的 ref 的行为与任何其他 ref 一样:它们是响应式的,可以传递到 (或从中返回) 复合函数中。

    疑问:整个 dom 都是可响应的吗?应该是只有这个 ref 才是可响应的吧。

    # JSX 中的用法

    export default {
      setup() {
        const root = ref(null)
    
        return () =>
          h('div', {
            ref: root
          })
    
        // with JSX
        return () => <div ref={root} />
      }
    }
    

    # v-for 中的用法

    组合式 API 模板引用在 v-for 内部使用时没有特殊处理。相反,请使用函数引用执行自定义处理:

    注释:在 2.0 中,模板使用场景时 v-for 和 ref 共同使用会生成 dom 数组。jsx 中使用时会根据配置项 refInFor 决定是生成 dom 数组,还是最后一个捕获的 dom

    <template>
      <div v-for="(item, i) in list" :ref="el => { if (el) divs[i] = el }">
        {{ item }}
      </div>
    </template>
    
    <script>
      import { ref, reactive, onBeforeUpdate } from 'vue'
    
      export default {
        setup() {
          const list = reactive([1, 2, 3])
          const divs = ref([])
    
          
          onBeforeUpdate(() => {
            divs.value = []
          })
    
          return {
            list,
            divs
          }
        }
      }
    </script>
    
  • 相关阅读:
    Js全选 添加和单独删除
    H5新手快速入门 简单布局
    DOM 节点 课程表
    Datalogic组网模式下通讯
    svn检出的时候报 Unable to connect to a repository at URL错误(摘自CSDN)
    Subsonic使用中
    HTTP 错误 500.21
    WinForm下增加声音提示
    IIS7.0发布Web服务器0002
    IIS7.0发布Web服务-0001
  • 原文地址:https://www.cnblogs.com/qq3279338858/p/14504665.html
Copyright © 2011-2022 走看看