Usecase
Consider you have a checkbox, on the toggle of the checkbox you have to get the employee information from another method if the checkbox is checked.
Solution
To begin with, I created the following things.
Assume the below method will get called once the checkbox is checked.
function getActiveEmployeeInformation(): Employee {
return {
name: {
firstName: "Sam",
lastName: "El",
},
};
}
A Simple component to store the checkbox status and the employeeInfo.
function Employee() {
const [status, updateStatus] = useState(false);
const [employeeInfo, updateEmployeeInfo] = useState<Employee | null>(null);
return (
<>
<label>
<input
type="checkbox"
checked={status}
onChange={() => {
updateStatus(!status);
}}
/>
Is Active
</label>
{status && (
<p>
{employeeInfo?.name.firstName} {employeeInfo?.name.lastName}
</p>
)}
</>
);
}
The obvious instinct will take us to write a method to be called on change of the checkbox and check the status there to call the getActiveEmployeeInformation method like below,
function onStatusChange(){
updateStatus(!status);
if(status){
const activeEmployeeInfo = getActiveEmployeeInformation();
updateEmployeeInfo(activeEmployeeInfo);
}
}
this seems like a solution, but the problem is status may not be updated right after the updateStatus call, which might lead to an inconsistent result.
To solve the above use-case, we need a simple understanding of the useEffect, in a very simple term it can be explained that when there is a change in the dependent variable the associated callback(method) will be called.
for example, if you connect, methodA to a variable employee, if any action changes the employee, that change will trigger a change-event to call the associated callback which is methodA.
Here useEffect is the connector that connects the variable and its callback.
useEffect(()=>{},[dependentVariable])
on change of the dependent variable the anonymous method will be called, using this we can solve our use case by adding the following snippet in our Employee component.
useEffect(() => {
if (status) {
const activeEmployeeInfo = getActiveEmployeeInformation();
updateEmployeeInfo(activeEmployeeInfo);
}
}, [status]);
In the above snippet, we used the status as a dependent variable, on change of it the anonymous method will get the employee info if the status is true. Once I get the information I store it in a state variable for further access.
Hope you enjoyed reading this, Do let me know your feedback in the comments.
Thanks,
Sam El
Top comments (0)