The effect
function in Angular runs a callback when a signal value it depends on changes. The callback is also invoked when the component first renders.
An effect
can depend on multiple signals or computed signals. When any of these signals change, the effect
callback executes.
Instead of running effect
in the constructor, it's best to assign it to a component property. This allows for manual interaction with the EffectRef
if needed.
[00:00] Run the effect function, which we first need to import from Angular core. Effect accepts a callback function which is going to be invoked whenever a signal value changes, a signal that this effect depends on. In our case, we're going to simply console log the current value of [00:20] the item signal. Of course, the signal function needs to be called so that the current value of the signal is being retrieved and passed down to the console log. When we save the file and the application renders and the component is getting displayed for the first time, we can see that the effect [00:40] has been executed initially. Now whenever the value of the signal changes, it will propagate the notification to the effect which is going to rerun. So let's create a new element that we would add. We can see that the signal is displaying the 4 new elements or when [01:00] we clear the list of the items, we can see that an empty array has been displayed. An effect could depend on multiple signals or computed signals. So for this reason, we would create one more signal with some initial value, and we would run the [01:19] signal function so that whenever any of these signals change, the effect would be executed. We can see that when the components gets initially displayed, the effect callback gets executed once. And when we change a value of any of the signals, in this case, we're [01:39] clearing the items, we can see that the effect callback has been executed once again. One important thing to note is that an effect returns an effect ref. In case we would need to manually interact with the effect ref, it's a good practice not to run the effect within the constructor, but [01:59] rather create a property and assign the effect to the property. So we would create console log effect and assign the effect to the property.
Member comments are a way for members to communicate, interact, and ask questions about a lesson.
The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io
Be on-Topic
Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.
Avoid meta-discussion
Code Problems?
Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context
Details and Context
Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!