Signal API

This page is for querying the main public APIs of flor::signal. For usage instructions, see Signal Reactive System.

Signal

trait Signal {
    fn id(&self) -> Id;
    fn exists(&self) -> bool;
    fn destroy(&self);
}

Read<T>

trait Read<T>: Signal {
    fn track(&self);
    fn try_get(&self) -> Option<T>
    where
        T: Clone + 'static;
    fn get(&self) -> T
    where
        T: Clone + 'static;
    fn get_ref(&self) -> SignalRef<'_, T>;
    fn try_get_ref(&self) -> Option<SignalRef<'_, T>>;
}

Write<T>

trait Write<T>: Signal {
    fn set(&self, new_value: T)
    where
        T: 'static;
    fn try_set(&self, new_value: T) -> bool
    where
        T: 'static;
    fn update(&self, f: impl FnOnce(&mut T))
    where
        T: 'static;
    fn try_update(&self, f: impl FnOnce(&mut T)) -> bool
    where
        T: 'static;
}

RwSignal<T>

RwSignal<T> is usually returned by create_signal or create_signal_with_label. Business code generally doesn't need to manually construct signal handles from Id.

impl<T> RwSignal<T> {
    fn split(self) -> (ReadSignal<T>, WriteSignal<T>);
    fn as_read(&self) -> ReadSignal<T>;
    fn as_write(&self) -> WriteSignal<T>;
    fn set_label(&self, label: &str);
}

ListRead<T>

trait ListRead<T>: Signal {
    fn track(&self);
    fn len(&self) -> Option<usize>;
    fn len_or_zero(&self) -> usize;
    fn is_empty(&self) -> bool;
    fn contains(&self, value: &T) -> bool
    where
        T: PartialEq + 'static;
    fn try_contains(&self, value: &T) -> Option<bool>
    where
        T: PartialEq + 'static;
    fn try_get(&self, index: usize) -> Option<T>
    where
        T: Clone + 'static;
    fn get(&self, index: usize) -> T
    where
        T: Clone + 'static;
    fn to_vec(&self) -> Vec<T>
    where
        T: Clone + 'static;
    fn try_to_vec(&self) -> Option<Vec<T>>
    where
        T: Clone + 'static;
    fn for_each_ref<F>(&self, f: F) -> Option<()>
    where
        F: FnMut(&T),
        T: 'static;
    fn try_borrow(&self) -> Option<ListRef<'_, T>>
    where
        T: 'static;
}

ListWrite<T>

trait ListWrite<T>: Signal {
    fn track(&self);
    fn push(&self, value: T)
    where
        T: 'static;
    fn try_push(&self, value: T) -> bool
    where
        T: 'static;
    fn set(&self, index: usize, value: T)
    where
        T: 'static;
    fn try_set(&self, index: usize, value: T) -> bool
    where
        T: 'static;
    fn insert(&self, index: usize, value: T)
    where
        T: 'static;
    fn try_insert(&self, index: usize, value: T) -> bool
    where
        T: 'static;
    fn remove(&self, index: usize) -> T
    where
        T: 'static;
    fn try_remove(&self, index: usize) -> Option<T>
    where
        T: 'static;
    fn clear(&self);
    fn try_clear(&self) -> bool;
    fn update(&self, index: usize, f: impl FnOnce(&mut T))
    where
        T: 'static;
    fn try_update(&self, index: usize, f: impl FnOnce(&mut T)) -> bool
    where
        T: 'static;
}

Creation Functions

fn create_signal<T: 'static>(value: T) -> RwSignal<T>;
fn create_rw_signal<T: 'static>(value: T) -> (ReadSignal<T>, WriteSignal<T>);
fn create_signal_with_label<T: 'static>(value: T, label: &str) -> RwSignal<T>;
fn create_rw_signal_with_label<T: 'static>(
    value: T,
    label: &str,
) -> (ReadSignal<T>, WriteSignal<T>);

fn create_list_signal<T: 'static>(value: Vec<T>) -> RwListSignal<T>;
fn create_rw_list_signal<T: 'static>(
    value: Vec<T>,
) -> (ReadListSignal<T>, WriteListSignal<T>);
fn create_list_signal_with_label<T: 'static>(
    value: Vec<T>,
    label: &str,
) -> RwListSignal<T>;
fn create_rw_list_signal_with_label<T: 'static>(
    value: Vec<T>,
    label: &str,
) -> (ReadListSignal<T>, WriteListSignal<T>);

fn create_effect<T>(f: impl Fn(Option<T>) -> T + 'static)
where
    T: Any + 'static;

fn create_updater<R>(
    compute: impl Fn() -> R + 'static,
    on_change: impl Fn(R) + 'static,
) -> R
where
    R: 'static;

fn create_updater_with_id<R>(
    compute: impl Fn() -> R + 'static,
    on_change: impl Fn(R) + 'static,
) -> (Id, R)
where
    R: 'static;

fn batch(f: impl Fn());