O front end resolve várias situações de "TypeError: Cannot read properties of undefined (reading 'xxx')

Descrição do problema: o console relata um erro "TypeError: Cannot read properties of undefined (reading 'xxx')"

Exemplo: TypeError: Não é possível ler propriedades de indefinido (lendo '$el') em eval

Análise de causa e solução

Situação 1:
O motivo desse erro é que alguns atributos em suas chaves estão indefinidos. Provavelmente porque você escreveu o nome do atributo errado

Situação 2:
Ao solicitar dados de forma assíncrona, como os dados são obtidos de forma assíncrona, não há atributo de dados no início, e este erro também será relatado neste caso. Por exemplo, tenho uma tabela de dados aqui e o valor inicial é um objeto vazio. Não reportaremos um erro quando usarmos { {tableData.detail}}, mas se usarmos { {tableData.detail.name}}, reportaremos um erro. Por quê?
Como tableData.detail já está indefinido, você definitivamente relatará um erro para undefined.name.
Portanto, na inicialização, o atributo detail recebe um objeto vazio.

Caso três:

Os dados retornados a você pelo back-end não possuem esse atributo ou alguns dos dados retornados possuem dados e alguns são nulos

Neste momento, você precisa verificar primeiro, você pode adicionar v-if para julgar

Situação 4:

Ao usar $nextTick, ao atualizar a tabela, a tabela não possui um atributo personalizado ou o atributo personalizado é referenciado incorretamente (porque o método é copiado do pronto, estou procurando há muito tempo, pit!)

<template>
// 起初没有定义ref="multipleTable"
 <el-table ref="multipleTable" :data="tableData" style="width: 100%" :header-cell-style="{ 
  background: '#f5f7fa' }">

 </el-table>
</template>

 methods: {
       getData() {
        let params = {
          ...this.queryFrom
        }
        params.pageNo = params.pageNo.toString()
        params.pageSize = params.pageSize.toString()
         getSettlementOrder(params).then(res => {
          this.tableData = res.result.data || []
           // 在数据更新后执行刷新表格
           this.$nextTick(() => {
            // myTable是表格的ref属性值
            if (this.$refs.multipleTable && this.$refs.multipleTable.doLayout) {
              this.$refs.multipleTable.doLayout();
            }
          })
          this.total = res.result.total || 0
          this.tabHeight = window.innerHeight - this.$refs.multipleTable.$el.offsetTop - 170;
        })
      },

おすすめ

転載: blog.csdn.net/sunwenpinglike/article/details/129690571