TypeError: Cannot read properties of null (reading ‘level‘)

news/2024/6/18 1:56:31 标签: vue.js, javascript, elementui

一、分析问题

1、一个下拉框组件的更新由另一个下拉框组件控制被动更新列表,子级下拉框的值是由父级下拉框的值调用接口获取,每次父级下拉框值的改变都会改变子级下拉框的数据源也就是会改变子级下拉框的options,切换后之前的父级节点找不到就会报了这个错,父级节点不改变(即不切换)的话不会报错

二、解决方案

1、vue页面的html层

<div>
	<el-row :gutter="15">
		<el-col :span="4">
			<div">父级下拉框:</div>
				<el-select clearable v-model="parentId" @change="parentSelected" placeholder="请选择父级下拉框">
					<el-option
		                v-for="item in parentInfos"
		                :key="item.Id"
		                :label="item.Name"
		                :value="item.Id">
					</el-option>
				</el-select>
		</el-col>
		<el-col :span="4">
  		<div class="name">子级下拉框:</div>
		    <el-cascader
		      class="entity"
		      ref="cascader"
		      :key="isChangeSelectKeyNum"
		      placeholder="请选择子级下拉框"
		      clearable
		      filterable
		      v-model="pId"
		      :options="options"
		      :props="{ checkStrictly: true }">
		    </el-cascader>
		</el-col>
	</el-row>
</div>

2、vue页面的数据定义层

data () {
    return {
	  parentId: '',
      parentInfos: [],
      pId: '',
      loading: false,
      list: [],
      currPage: 1,
      pageSize: 10,
      counts: 0,
      isChangeSelectKeyNum: 0,
    }
  },

3、vue页面的方法层

javascript">methods: {
	// 获取XX列表
    async parentSelected (val) {
      this.loading = true
      try {
        const data = await GetXXXList({
          XXX: val,
        })
        ++this.isChangeSelectKeyNum
      this.loading = false
    },
}

4、本文的核心是isSelectShow,key值改变,级联组件会重新渲染

isSelectShow

5、至于为什么改变key的值,级联组件就会重新渲染?

在Vue中,key是用来追踪每个节点的身份,当key改变时,Vue会认为这是一个新的节点,因此会重新渲染这个组件。
首先,我们需要理解Vue的渲染机制。在Vue中,组件的渲染是基于它们的数据和属性进行的。当这些数据或属性发生变化时,Vue会自动检测到这些变化,并重新渲染相关的组件,以确保视图与数据保持同步。
key属性在Vue中具有特殊的意义。它被用作一个标识符,用于追踪每个节点的身份。当key的值发生变化时,Vue会认为这是一个全新的节点,因为key的变动意味着之前的数据和状态可能已经不再适用。为了确保视图的一致性和准确性,Vue会选择重新渲染这个组件。

对于el-cascader组件来说,它是一个级联选择器,通常用于选择有层次结构的数据。当你改变它的key值时,Vue会认为这是一个新的el-cascader组件,因此会触发重新渲染,以确保视图与最新的数据和状态相匹配。

总结起来,改变el-cascader的key值会触发重新渲染,是因为Vue通过key来识别组件的身份,当key发生变化时,意味着组件的状态或数据可能发生了变动,为了保持视图与数据的同步,Vue会选择重新渲染这个组件。

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。


http://www.niftyadmin.cn/n/5179792.html

相关文章

一个非常基础的python函数语法:lambda表达式

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 lambda表达式本身是一个非常基础的python函数语法&#xff0c;其基本功能跟使用def所定义的python函数是一样的&#xff0c; 只是lambda表达式基本在一行以内就完…

网易有道开源语音合成引擎“易魔声”

概述 11 月 10 日&#xff0c;网易有道正式上线“易魔声”开源语音合成&#xff08;TTS&#xff09;引擎&#xff0c;所有用户可免费在开源社区 GitHub 进行下载使用&#xff0c;通过其提供的 web 界面及批量生成结果的脚本接口&#xff0c;轻松实现音色的情感合成与应用。 据…

相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象

//在此之前可以先浏览我编写的通用上位机类&#xff0c;更方便理解 https://blog.csdn.net/m0_51559565/article/details/134403745最近完成一个关于海康采图的demo&#xff0c;记录并说明用法。 先上代码。using System; using System.Collections.Generic; using System.Runt…

Pikachu(皮卡丘靶场)初识XSS(常见标签事件及payload总结)

目录 1、反射型xss(get) 2、反射性xss(post) 3、存储型xss 4、DOM型xss 5、DOM型xss-x XSS又叫跨站脚本攻击&#xff0c;是HTML代码注入&#xff0c;通过对网页注入浏览器可执行代码&#xff0c;从而实现攻击。 ​ 1、反射型xss(get) Which NBA player do you like? 由…

GPTS应用怎么创建?GPTS无法创建应用很卡怎么办

在首届开发者大会上&#xff0c;OpenAI宣布推出了GPTs功能&#xff0c;也就是GPT Store&#xff0c;类似App Store的应用商店&#xff0c;任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程&#xf…

C++多线程编程:其四、向线程函数传递参数

我们创建一个thread对象的时候&#xff0c;要传入一个函数指针。对应的函数可能有参数。 一、拷贝传参 直接拷贝过去&#xff0c;没什么好说的。拷贝之后互不影响。 但是仍然要注意指针这种东西&#xff01;&#xff01;&#xff01;你可以把指针里面存储的地址拷贝过去&…

超详细!必看!!STM32--时钟树原理

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…

k8s系列文章二:集群配置

一、关闭交换分区 # 临时关闭分区 swapoff -a # 永久\关闭自动挂载swap分区 sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab 二、修改cgroup管理器 ubuntu 系统&#xff0c;debian 系统&#xff0c;centos7 系统&#xff0c;都是使用 systemd 初始化系统的。systemd 这边…