reactive-python / reactpy

It's React, but in Python
https://reactpy.dev
MIT License
7.74k stars 318 forks source link

Create `use_effect` condition that triggers every render, but only cleans up on a true unmount. #1197

Open Archmonger opened 4 months ago

Archmonger commented 4 months ago

Current Situation

Right now use_effect(..., dependencies=None) triggers AND cleans up on every render. But there are circumstances where I need some conditions checked (such as within ReactPy Django's django_css component) on every render, and then need a specific action taken only when a true component dismount takes place.

Proposed Actions

Create a variant of use_effect(..., dependencies=None) that can only clean up on the final render.

We might want to use this as a pivot point to change the way we currently declare "manual effect conditions". The API is currently not very intuitive.

Perhaps we have some kind of object that signifies all the available manual effect conditions?

use_effect(..., dependencies=EffectType.trigger_always_clean_always)
use_effect(..., dependencies=EffectType.trigger_always_clean_once)
use_effect(..., dependencies=EffectType.trigger_once_clean_once)
use_effect(..., dependencies=[x, y])  # Manual condition definitions