组件key

作者: 3e2235c61b99 | 来源:发表于2022-10-19 11:22 被阅读0次

在写代码时遇到一个小问题,代码模拟如下:

  <div>
    <el-radio-group v-model="value">
      <el-radio-button label="1">张三</el-radio-button>
      <el-radio-button label="2">李四</el-radio-button>
      <el-radio-button label="3">王五</el-radio-button>
    </el-radio-group>

    <div>
      <dictSelect v-if="1 == value" v-model="value2" :options="options1" @change="change1"></dictSelect>
      <dictSelect v-if="2 == value" v-model="value2" :options="options2" @change="change3"></dictSelect>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: '',
      value2: '',
      dataKey: new Date().getTime(),
      options1: [
        { key: '1', value: '编号:316165390658961408 暂无证件号' },
      ],
      options2: []
    }
  },
}
</script>

dictSelect是自己封装过的el-select组件,里面有一个功能是如果options有值,会自动选中第一个值并触发change事件
问题如下:value从张三切换到李四时,options2为空,在组件中查看数据options取到的值也是为空,但是组件会把options1的值渲染出来,如下图所示:

问题
这种问题好解决嘛,加个key就好了。我想dictSelect组件一次只会加载一个,我就没必要在每个dictSelect上都加key了,直接在父元素上加一个key好了,代码如下:
<div :key="dataKey">
  <dictSelect v-if="1 == value" v-model="value2" :options="options1" @change="change1"></dictSelect>
  <dictSelect v-if="2 == value" v-model="value2" :options="options2" @change="change3"></dictSelect>
</div>

以上代码,同时在value值切换时更新key,但是这样会出现组件加载时选中第一个值会触发一次change事件,key更新时组件更新会再次触发change事件,导致change事件触发两次的问题
解决以上问题只需要,把key加到每个组件上就ok了,并且key不需要使用动态key,只需要使用固定字符串就可以了
代码如下:

<div>
  <dictSelect key="dictKey1" v-if="1 == value" v-model="value2" :options="options1" @change="change1"></dictSelect>
  <dictSelect key="dictKey2" v-if="2 == value" v-model="value2" :options="options2" @change="change3"></dictSelect>
</div>

相关文章

  • 组件key

    在写代码时遇到一个小问题,代码模拟如下: dictSelect是自己封装过的el-select组件,里面有一个功能...

  • 如何渲染一个组件?

    在组件上定义个key,这个key用时间戳来更新值,来渲染组件。

  • React列表 & Key

    渲染多个组件 使用 {} 在 JSX 内构建一个元素集合。 基础列表组件 在一个组件中渲染列表。 key key ...

  • vue 元素/组件 :key

    在元素/组件中使用:key,动态绑定元素/组件的key;可以起到强制刷新/重新渲染的效果(替换为新的元素/组件,而...

  • flutter 获取组件的宽高

    一、为组件设置key 二、获取组件的宽高

  • react-native 报错:Each child in an

    解决办法:在被遍历的组件中添加key属性,即key = {key} 代码如下: this.props.banner...

  • RN 刨坑之旅

    1、warnings: missing keys组件列的每个组件需加上key 2、VirtualizedList:...

  • vue中如何不刷新页面让组件重新渲染?

    v-if(可以重置生命周期) :key="key"此处可触发watch和update vue使用key标记组件身份...

  • ReactNative Props、States、获取屏幕尺寸、

    Props 一般用在自定义组件的时候,内部需要传递参数时使用。 自定义组件:this.props.key中key就...

  • echarts图 饼图

    1 强制react组件实时刷新添加一个key 值,触发的时候,改变key值,带动组件更新 2 饼图 呈现的效果:

网友评论

      本文标题:组件key

      本文链接:https://www.haomeiwen.com/subject/emcuzrtx.html