Giter Club home page Giter Club logo

Comments (6)

JeanMeche avatar JeanMeche commented on June 18, 2024

Effects have no sense of value history.
When a signal is updated, it marks its consummers as dirty. When an effect that consumes a signal is markAsDirty, it will schedule itself.
This why you are observing that the effect re-run even if the signal value appears to be the same.

If you need to tree each value independently, signal are the wrong pattern and you should look at using observables.

from angular.

Harpush avatar Harpush commented on June 18, 2024

Effects have no sense of value history. When a signal is updated, it marks its consummers as dirty. When an effect that consumes a signal is markAsDirty, it will schedule itself. This why you are observing that the effect re-run even if the signal value appears to be the same.

If you need to tree each value independently, signal are the wrong pattern and you should look at using observables.

I wonder when is it expected for the effect to run if the signal didn't change? I mean the logic will probably execute the same as nothing actually changed.
A bit weird this is wanted...

from angular.

JeanMeche avatar JeanMeche commented on June 18, 2024

Effects schedule themeselves via a microtask (+ some extract behaviors in the context of components).

Your signal did change twice:

  1. 'angular => undefined
  2. undefined => 'angular'
    Both those value changes mark the consumers as dirty, because the value did actually change ('angular' => 'angular' wouldn't have mark them as dirty).

Signals are about being notified eventually when a state is dirty, not individual value updates.

from angular.

Harpush avatar Harpush commented on June 18, 2024

Effects schedule themeselves via a microtask (+ some extract behaviors in the context of components).

Your signal did change twice:

  1. 'angular => undefined
  2. undefined => 'angular'
    Both those value changes mark the consumers as dirty, because the value did actually change ('angular' => 'angular' wouldn't have mark them as dirty).

Signals are about being notified eventually when a state is dirty, not individual value updates.

That's unfortunate... Like computed won't compute if there was no change at the end I thought effect should too... I still can't see a use case for it to be honest

from angular.

JeanMeche avatar JeanMeche commented on June 18, 2024

Computed also re-run with the same usecase.

https://stackblitz.com/edit/angular-next?file=src%2Fmain.ts

from angular.

Harpush avatar Harpush commented on June 18, 2024

At least it is consistent although in my opinion consistently bad.
It means for computed as state if two updates happen which result in no change the computed will still run unnecessarily and might trigger further computed runs which will be more expensive. And you can't hail out of it.
For effect you can't rely on it as a real change notifier and must take all deps as observables with distinctUntilChanged... For example emit output on computed change must be through observable and other cases too.

To sum it - this seems unexpected

from angular.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.