UseEffect
Esta página aún no está disponible en tu idioma.
UseEffect
is a RtHook that allows to manage side-effect, and its functionality is closely related to Lifecycle of the instance and its dependencies.
Syntax
UseEffect( void | Function callback(), List<RtState> dependencies,);
// UseEffect run on initUseEffect.runOnInit( void | Function callback(), List<RtState> dependencies,);
UseEffect
accepts these arguments:
-
callback
: A function that performs side effects. This function is executed when thedependencies
argument changes or the instance triggerLifecycle.didMount
event. If thecallback
returns aFunction
(considers as an effect cleanup), it will be called before the next effect is run or the instance triggerLifecycle.willUnmount
event. -
dependencies
: A list of state(RtState
, learn about it here) that the effect depends on.
Properties & Methods
UseEffect
provides the following properties and methods:
-
Methods inherited from
RtState
(Learn more here):-
update
: A method to notify changes after run a set of instructions. -
refresh
: A method to force to notify changes. - *
bind
: A method to bind an instance to it. - *
unbind
: A method to unbind an instance to it. - *
dispose
: A method to remove all listeners and free resources.
-
Usage
Declaration
UseEffect
can be initialized using the constructor class, e.g.:
6 collapsed lines
1class MyCounter {2 final uCount = UseState(0);3
4 const MyCounter() {5 final timer = Timer.periodic(Duration(seconds: 1), (_) => uCount.value++);6
7 UseEffect(() {8 // Execute by `uCount` state changed or 'Lifecycle.didMount' event9 print("Count: ${uCount.value}");10
11 return () {12 // Effect cleanup - Execute before `uCount` state changed or 'Lifecycle.willUnmount' event13 if (uCount.value == 10 && timer.isActive) {14 timer.cancel();15 print("Counter stopped");16 }17 };18 }, [uCount]);2 collapsed lines
19 }20}
In the example above, the UseEffect
hook is used to print the value
of the uCount
state every second and stop the timer when the value reaches 10
.
Running it inmediately
Sometime you may want to execute inmediately the UseEffect
is initialized, you can use UseEffect.runOnInit
to do that, e.g.:
3 collapsed lines
1final uCount = UseState(0);2
3void main() {4 UseEffect.runOnInit(() {5 // Execute by `uCount` state changed or 'Lifecycle.didMount' event6 print("Count: ${uCount.value}");7 Future.delayed(const Duration(seconds: 1), () => uCount.value++);8
9 return () {10 // Effect cleanup - Execute before `uCount` state changed or 'Lifecycle.willUnmount' event11 print("Cleanup executed");12 };13 }, [uCount]);1 collapsed line
14}
In the example above, the UseEffect.runOnInit
hook is used to print the value
of the uCount
state inmediately and increment the value every second.