I have a custom lwc that works with refresh apex. I want a method to be refreshed from another function
js:
import {refreshApex} from '@salesforce/apex';
import initData from '@salesforce/apex/myClass.initData';
export default class Tm_GDPRInfoSignatureLWC LightningElement {
wiredGDPRresult;
@track myData;
@wire(initData , {recordId : '$recordID'}) wiredInitData(result) {
this.wiredGDPRresult = result;
//data retrieved
if(result.data) {
console.log('entered');
this.myData = result.data;
console.log('finished');
}
//error
else if(result.error){
console.log(JSON.stringify(result.error));
}
}
refreshData(){
return refreshApex(this.wiredGDPRresult);
}
}
And it's working find when initializing the lwc but whenever I call refreshData it's doing nothing (not even displaying console.logs())
Is there something I'm setting wrong or do I need to call refreshApex in a different way?
EDIT
I'm calling my function whenever I receive a custom event from another lwc. And it's receiving that event but refreshApex
doesn't do anything
connectedCallback(){
registerListener('refreshData', this.refreshData, this);
}
Best Answer
It will actually work but as its cacheable (or cached to be precise) apex method, the wired function imperativeWire will be invoked ONLY if the apex method response changes/modified. However every time you invoke
refreshData
, you will see the apex log - can be tested in developer console.For testing, you can return some accounts:
Then use wired function to get these accounts in LWC component.
Then when you change some field value in one of these accounts and invoke
refreshData
you will see the console log in LWC also.