Learn when to use the @wire decorator in Salesforce LWC for easier data handling, better performance, and real-time updates.
Table of Contents
What is the @Wire Decorator?
The @wire
decorator connects your component to Salesforce data. It automatically handles data updates and errors. This makes working with Salesforce data simpler. You don’t have to worry about manually fetching or refreshing data.
When to Use @Wire
Here are some common situations where using @wire
is the best choice:
1. When You Need Automatic Data Updates
Use @wire
when your component needs real-time data. For example, if you’re displaying a contact’s details, @wire
will automatically update the data if the contact is changed by another user.
import { LightningElement, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
const FIELDS = ['Contact.Name', 'Contact.Email'];
export default class ContactDetails extends LightningElement {
@wire(getRecord, { recordId: '003XXXXXXXXXXXXXXX', fields: FIELDS })
contact;
}
In this example, the contact’s name and email update automatically whenever the record changes.
2. When You Want Simple Code
@wire
makes your code cleaner and easier to read. If you don’t need complex logic to get data, @wire
is the way to go. For example, here’s how to show a list of open cases:
import { LightningElement, wire } from 'lwc';
import getOpenCases from '@salesforce/apex/CaseController.getOpenCases';
export default class CaseList extends LightningElement {
@wire(getOpenCases) cases;
}
This code fetches the cases and handles everything for you, so you don’t need to manually manage promises.
3. When Performance Matters
The @wire
decorator is optimized for performance. It can cache data, reducing the number of server calls. This improves the speed of your component and gives users a better experience. It’s especially helpful when building apps that need to load data quickly.
4. When You Want Built-in Error Handling
If there’s a problem loading data, @wire
makes it easy to handle errors. You can check for errors and display messages without writing extra code:
@wire
is optimized for performance. It caches data, meaning it won’t make extra calls to the server if the data hasn’t changed. This speeds up your component and improves the user experience, especially in large applications.
@wire(getSomeData)
wiredData({ error, data }) {
if (data) {
this.data = data;
} else if (error) {
this.error = error;
}
}
With @wire
, error handling becomes simple and automatic.
When NOT to Use @Wire
Even though @wire
is powerful, there are times when it’s not the best choice:
- When you need control over when data loads. If you want to load data only after a user clicks a button, calling Apex methods directly (using
.then()
and.catch()
) is a better approach. - When your data depends on user input. For instance, if you need to fetch data based on what a user enters in a form, using direct Apex calls gives you more control.
Conclusion
Here’s a short summary of the blog post with key points:
- @wire in Lightning Web Components (LWC) automatically handles data fetching, updates, and error management.
- Use @wire when you need real-time data updates.
- It simplifies code, improving readability and performance.
- Best for cases where data updates frequently or you need caching.
- Avoid @wire if you need to control when data loads or if data depends on user actions.
The @wire
decorator is great for working with Salesforce data in LWC. It provides real-time updates, better performance, and simple error handling. Use @wire
when you want your component to be reactive and easy to maintain. However, if you need more control over when data loads, calling Apex methods imperatively may be the better option.
By knowing when to use @wire
, you can build more efficient and reliable components in Salesfor