LWC - 创建新记录后如何刷新闪电数据表的数据?

LWC - How would I refresh the data of a lightning-datatable after a new record is created?

我正在使用有线服务和 apex 控制器来初始获取数据。

像这样:@wire (fetchAccounts)parameters.

我希望能够在数据表中查看新创建的帐户:

    <lightning-datatable 
       key-field="id"
       data={parameters.data}
       onrowaction={handleRowAction}
       row-number-offset={rowOffset}
       hide-checkbox-column="true"
       columns={columns}>
    </lightning-datatable>

什么是正确的做法?

为了实现这一点,可以在此处找到文档:https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.apex#data_apex__refresh_cache

所以看起来像这样:


// add this import statement
import { refreshApex } from '@salesforce/apex';


    @track parameters;
    @track error;

    /** Wired Apex result so it can be refreshed programmatically */
    _wiredResult;

    @wire(fetchAccounts)
    wiredCallback(result) {
        this._wiredResult = result;
        if (result.data) {
            this.parameters = result.data;
            this.error = undefined;
        } else if (result.error) {
            this.error = result.error;
            this.parameters = undefined;
        }
    }

    // in order to refresh your data, execute this function:
    refreshData() {
        return refreshApex(this._wiredResult);
    }

并将您的 HTML 更改为:


<lightning-datatable 
   key-field="id"
   data={parameters}
   onrowaction={handleRowAction}
   row-number-offset={rowOffset}
   hide-checkbox-column="true"
   columns={columns}>
</lightning-datatable>


如果你想阅读一个很好的例子,你可以在这里找到:https://github.com/trailheadapps/lwc-recipes/blob/master/force-app/main/default/lwc/ldsDeleteRecord/ldsDeleteRecord.js

您需要在调用服务器后调用 refreshApex(在 .then() 回调中) 以下是如何在更改数据库内容后实现 html 数据刷新的工作示例:

import { LightningElement, wire, track } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import findSomething from '@salesforce/apex/ApexController.findMethod';
import changeSomething from '@salesforce/apex/ApexController.changeMethod';
import {refreshApex} from '@salesforce/apex';

findSomething
changeSomething
@track paramForChangeOne
@track paramForChangeTwo

@wire(findSomething, { paramOne: '$paramOne', paramTwo: '$paramTwo' }) findSomething;

callFromHtml(){
    changeSomething({paramForChangeOne: this.paramForChangeOne, paramForChangeTwo: this.paramForChangeTwo})
    .then(result => {
        if(result){
            this.showNotification('success', 'Success Message', '');
        }
        // refreshing table data using refresh apex(HERE NEEDS TO BE SET)
        refreshApex(this.findSomething);
    })
    .catch(error => {
        console.log(error);
    });
}