【问题标题】:Refresh table LWC刷新表 LWC
【发布时间】:2021-08-17 16:00:20
【问题描述】:

当我使用闪电记录表单更新客户记录时,我一直在尝试重新呈现表格。 我尝试用我在这里找到的类似问题来寻找解决方案,但我仍然无法实现这一目标。 在这种情况下,我使用所有代码下方的预览中显示的名称为“Gonzalo”的帐户对 recordId 进行了硬编码。所以想要的结果是更新帐户名称或任何字段并在表中查看即时结果。 这是我的代码:

  • Apex 方法(以防万一):
@AuraEnabled(cacheable=true)
    public static List<Account> getCuentas() {
        return [SELECT id, Name, Phone FROM Account LIMIT 5];
    }
  • 表单 (HTML):
    <lightning-record-form
              object-api-name="Account"
              record-id="0015e00000F2JoWAAV"
              fields={fields}
              onsubmit={handleSubmit}
              >
            </lightning-record-form>
  • 表格 (HTML):
<lightning-datatable 
            key-field="pk"
            data={cuentas}
            columns={columnas}
            onrowselection={action}
            hide-checkbox-column
            onrowaction={handleRow}
            default-sort-direction={defaultSortDirection}
            sorted-direction={sortDirection}
            sorted-by={sortedBy}
            onsort={onHandleSort}
            >
          </lightning-datatable>
  • 相关代码(JS):
***Imports***
import { refreshApex } from '@salesforce/apex';
import NAME from '@salesforce/schema/Account.Name';
import PHONE from '@salesforce/schema/Account.Phone';
import getCuentas from '@salesforce/apex/ProbandoJSON.getCuentas';
import { LightningElement, api, wire, track } from 'lwc';

***Vars for the form fields***
fields = [NAME, PHONE];

***Columns***
columnas = [
    {
      label: 'View',
      type: 'button',
      initialWidth: 75,
      typeAttributes: {
        label: {
          fieldName: 'Boton'
        },
        title: 'Preview',
        alternativeText: 'View',
        variant: 'border-filled'
      } 
    },
    {
      label: 'Name', 
      fieldName: 'Name',
      sortable: true
    },
    {
      label: 'Phone',
      fieldName: 'Phone'
    }
  ];

***Accounts***
@track cuentas = [];
  _wiredResult;
  @wire(getCuentas)
  wireCuentas(result) {
    this._wiredResult = result;
    if(result.data) {
      console.log('cuentas');
      console.log(result.data);
      
      for(var i in result.data) {
        let obj = {};
        obj.Id = result.data[i].Id;
        obj.Name = result.data[i].Name;
        obj.Phone = result.data[i].Phone;
        obj.Boton = parseInt(i) + 1;
        this.cuentas = [...this.cuentas, obj];
      }
      console.log('cuentas de nuevo');
      console.log(this.cuentas);
    } else if(result.error) {
      console.log('error cuentas');
      console.log(result.error);
    }
  }

***Submit handler for the Save button in the form***
handleSubmit(event) {
    console.log('saving...')
    return refreshApex(this._wiredResult);
  }

组件预览:

【问题讨论】:

    标签: javascript salesforce apex salesforce-lightning lwc


    【解决方案1】:

    看起来像缓存问题。

    我们可以通过以下几种方式解决这个问题:

    1. 删除缓存

    您需要删除(cacheable=true),然后必须在每次表单更新或加载初始数据时强制调用 apex 方法。

    1. 在 apex 方法中创建一个不必要的参数,每次调用都会有新的值

    您需要在 apex 方法中接收一个整数形式的附加参数,然后在 lwc 中创建一个 var 将其初始化为 0,并在每次更新时将其递增 1。

    然后使用相同的 var 通过连线或命令式调用调用 apex 方法。

    【讨论】:

    • 谢谢,我最终在每次更新时都强制调用该方法!不知道有没有那么高效,但确实有效!
    • 别担心,如果您正在处理数据更新并希望拥有相同的数据而不是缓存的数据,它会很有效
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多