fix: Update use_hook docs (#2296)
* fix: Update `use_hook` docs * rust * fixes
This commit is contained in:
1 parent
96b9baafff
commit
29f69fa145
2 files changed
+63
-8
No files matched your search
@@ -273,19 +273,47 @@ impl Scope {
|
||||
|
||||
/// Store a value between renders. The foundational hook for all other hooks.
|
||||
///
|
||||
/// Accepts an `initializer` closure, which is run on the first use of the hook (typically the initial render). The return value of this closure is stored for the lifetime of the component, and a mutable reference to it is provided on every render as the return value of `use_hook`.
|
||||
/// Accepts an `initializer` closure, which is run on the first use of the hook (typically the initial render).
|
||||
/// `use_hook` will return a clone of the value on every render.
|
||||
///
|
||||
/// When the component is unmounted (removed from the UI), the value is dropped. This means you can return a custom type and provide cleanup code by implementing the [`Drop`] trait
|
||||
/// In order to clean up resources you would need to implement the [`Drop`] trait for an inner value stored in a RC or similar (Signals for instance),
|
||||
/// as these only drop their inner value once all references have been dropped, which only happens when the component is dropped.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use dioxus::prelude::*;
|
||||
/// ```rust
|
||||
/// use dioxus::prelude::*;
|
||||
///
|
||||
/// // prints a greeting on the initial render
|
||||
/// pub fn use_hello_world() {
|
||||
/// use_hook(|| println!("Hello, world!"));
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Custom Hook Example
|
||||
///
|
||||
/// ```rust
|
||||
/// use dioxus::prelude::*;
|
||||
///
|
||||
/// pub struct InnerCustomState(usize);
|
||||
///
|
||||
/// impl Drop for InnerCustomState {
|
||||
/// fn drop(&mut self){
|
||||
/// println!("Component has been dropped.");
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// #[derive(Clone, Copy)]
|
||||
/// pub struct CustomState {
|
||||
/// inner: Signal<InnerCustomState>
|
||||
/// }
|
||||
///
|
||||
/// pub fn use_custom_state() -> CustomState {
|
||||
/// use_hook(|| CustomState {
|
||||
/// inner: Signal::new(InnerCustomState)
|
||||
/// })
|
||||
/// }
|
||||
/// ```
|
||||
pub fn use_hook<State: Clone + 'static>(&self, initializer: impl FnOnce() -> State) -> State {
|
||||
let cur_hook = self.hook_index.get();
|
||||
let mut hooks = self.hooks.try_borrow_mut().expect("The hook list is already borrowed: This error is likely caused by trying to use a hook inside a hook which violates the rules of hooks.");
|
||||
|
||||
Reference in new issue
Block a user