raui_derive

Attribute Macro pre_hooks

source
#[pre_hooks]
Expand description

An attribute macro that allows you to add hooks that will execute before your component body

See Also: post_hooks for an alternative that runs after your component body

Hooks allow you to create reusable logic that can be applied to multiple components.

§Usage Example

#[pre_hooks(use_button_notified_state)]
pub fn image_button(mut context: WidgetContext) -> WidgetNode {
   // Do stuff and potentially use state added by the `use_button_notified_state` hook
}

§Creating a Hook

Hooks are simply functions that take a mutable reference to the component’s [WidgetContext][raui_core::widget::context::WidgetContext].

pub fn use_button_notified_state(context: &mut WidgetContext) {
    // hook into the lifecycle of whatever widget this hook is applied to
    context.life_cycle.change(|context| {
        for msg in context.messenger.messages {
            // listen for button messages
            if let Some(msg) = msg.as_any().downcast_ref::<ButtonNotifyMessage>() {
                // And modify the context state with the button info
                let _ = context.state.write_with(msg.state);
            }
        }
    });
}