States
In Reflex, State is the single source of truth for your application's data. Unlike React where state is typically client-side, Reflex state lives on the server, allowing you to use Python's full power for business logic while keeping the UI in sync.
Substates & Organization
As your app grows, putting everything in one rx.State class becomes unmanageable and slow. Reflex allows you to split logic into Substates.
class ThemeState(rx.State):
is_dark: bool = False
def toggle_mode(self):
self.is_dark = not self.is_dark
class AuthState(rx.State):
user_id: str | None = None
@rx.var
def is_authenticated(self) -> bool:
return self.user_id is not None
Cross-State Communication
Sometimes one state needs to know about another. Reflex provides two key async methods for this:
get_state()
Retrieves the entire instance of another state. Use this when you need to call methods or modify multiple variables in the target state.
class CartState(rx.State):
async def checkout(self):
auth = await self.get_state(AuthState)
if not auth.is_authenticated:
return rx.redirect("/login")
# Proceed with checkout...
get_var_value
A more efficient way to retrieve a single value without loading the entire target state object.
class AnalyticsState(rx.State):
async def track_view(self):
user_id = await self.get_var_value(AuthState.user_id)
# Track view for user_id...