Saltar al contenido

Forzar vista de actualización en LWC

Investigamos por distintos espacios para traerte la solución para tu inquietud, si tienes preguntas deja tu inquietud y respondemos porque estamos para servirte.

Solución:

Agregar información de los comentarios.

A partir de hoy, no hay un mapeo 1-1 de Aura vs. LWC eventos/interfaces. Si bien el enfoque que tiene allí puede funcionar, pero personalmente no recomendaré que lo use de esa manera.

Como se desprende de sus comentarios, tiene un LWC en una página de iluminación en LEX junto con otros componentes estándar, a saber, una lista relacionada. Y que tras las actualizaciones en el LWC, desea que se actualice la lista relacionada estándar. Mi enfoque aquí habría sido envoltura el LWC en un Componente Aura, envíe un evento al Componente Aura y luego utilice force:refreshView en el Componente Aura.

Esto puede parecer un placa de caldera enfoque, pero debido a que puede componer un LWC dentro de un Componente Aura y puede comunicarse con eventos, este enfoque sería el más seguro ruta.

Su implementación general podría verse como:


    <-- this is the LWC -->
    

Y luego en el LWC, planteas el evento una vez que tienes los registros actualizados:

this.dispatchEvent(new CustomEvent('recordChange'));

Y luego en su controlador Aura JS, maneja el evento:

refreshView: function(component, event) 
    // refresh the view
    $A.get('e.force:refreshView').fire();
,

Pude encontrar una respuesta en el foro Developer Docs para una solución alternativa. Me sorprendió lo difícil que fue encontrar una solución en los documentos de LWC de Salesforce, por lo que no estoy seguro de si este es el enfoque recomendado, ¡pero es el mejor que he podido encontrar! Tendrá que importar el updateRecord método de la lightning/uiRecordApi. Entonces, puedes llamar a esto updateRecord() función en su archivo lwc javascript cada vez que desee que se actualice su página de registro de detalles (es decir, la página de detalles de la cuenta). En el siguiente ejemplo, tengo un lwc que vive en mi página de detalles de rayos en el registro de la cuenta (es decir, como un componente de la barra lateral). En el ejemplo, mi lwc llama a un método handleClick que llama imperativamente a un updateAccount() método en mi clase de controlador de Apex. En el método de devolución de llamada, actualizo el registro de detalles de la cuenta usando el updateRecord() función.

Documento del desarrollador: https://developer.salesforce.com/forums/?id=9062I000000XjwnQAC

Declaración de importación:

import updateRecord from 'lightning/uiRecordApi';

Función:

updateRecord( fields: Id: this.recordId );

Ejemplo:

import  LightningElement, api, track, wire  from 'lwc';
import  updateRecord  from 'lightning/uiRecordApi';
import updateAccount from '@salesforce/apex/ApexControllerClass.updateAccount;

export default class lightning-web-component-example extends LightningElement 

     @api recordId;

     handleClick()

          // Call Apex Method imperatively to update Account record
          updateAccount(accountId: this.recordId)
               .this( result => 

                    if (result) 
                         // Refresh Account Detail Page
                         updateRecord(fields: this.recordId)
                    

               )
     

A partir de Winter ’21, podrás usar getRecordNotifyChange() función para actualizar su página de registro desde un componente web relámpago.

getRecordNotifyChange está funcionando casi de la misma manera force:refreshView lo hizo, excepto que se necesita una lista de recordId lo que lo hace un poco más flexible:

import  LightningElement, wire  from 'lwc';
import  getRecord, getRecordNotifyChange  from 'lightning/uiRecordApi';
import apexUpdateRecord from '@salesforce/apex/Controller.apexUpdateRecord';
     
export default class NotifyRecordChangeExample extends LightningElement 
  @api recordId;
     
  // Wire a record.
  @wire(getRecord,  recordId: '$recordId', fields: ... )
  record;
     
  async handler() 
    // Update the record via Apex.
    await apexUpdateRecord(this.recordId);
    // Notify LDS that you've changed the record outside its mechanisms.
    getRecordNotifyChange([recordId: this.recordId]);
  

Aquí puedes ver las reseñas y valoraciones de los lectores

Acuérdate de que tienes la capacidad de agregar una reseña si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *