use_map

Function use_map 

Source
pub fn use_map<'hook, K, V>(
    initial_value: HashMap<K, V>,
) -> impl 'hook + Hook<Output = UseMapHandle<K, V>>
where K: 'static + 'hook, V: 'static + 'hook,
Expand description

A hook that tracks a hash map and provides methods to modify it.

§Example

use yew_hooks::prelude::*;

#[function_component(UseMap)]
fn map() -> Html {
    let map = use_map(HashMap::from([
        ("Mercury", 0.4),
        ("Venus", 0.7),
        ("Earth", 1.0),
        ("Mars", 1.5),
    ]));

    let onset = {
        let map = map.clone();
        Callback::from(move |_| map.set(HashMap::from([("Moon", 0.8), ("Earth", 1.0)])))
    };
    let oninsert = {
        let map = map.clone();
        Callback::from(move |_| {
            let _ = map.insert("Jupiter", 2.1);
        })
    };
    let onupdate = {
        let map = map.clone();
        Callback::from(move |_| map.update(&"Earth", 1.1))
    };
    let onremove = {
        let map = map.clone();
        Callback::from(move |_| {
            let _ = map.remove(&"Moon");
        })
    };
    let onretain = {
        let map = map.clone();
        Callback::from(move |_| map.retain(|_k, v| v > &mut 1.0))
    };
    let onclear = {
        let map = map.clone();
        Callback::from(move |_| map.clear())
    };

    html! {
        <div>
            <button onclick={onset}>{ "Set" }</button>
            <button onclick={oninsert}>{ "Insert" }</button>
            <button onclick={onupdate}>{ "Update" }</button>
            <button onclick={onremove}>{ "Remove" }</button>
            <button onclick={onretain}>{ "Retain" }</button>
            <button onclick={onclear}>{ "Clear all" }</button>
            <p>
                <b>{ "Current value: " }</b>
            </p>
            {
                for map.current().iter().map(|(k, v)| {
                    html! {
                        <p><b>{ *k }</b> {": "} { v }</p>
                    }
                })
            }
        </div>
    }
}

§Note

When used in function components and hooks, this hook is equivalent to:

/// A hook that tracks a hash map and provides methods to modify it.
///
/// # Example
///
/// ```rust
/// # use std::collections::HashMap;
/// # use yew::prelude::*;
/// #
/// use yew_hooks::prelude::*;
///
/// #[function_component(UseMap)]
/// fn map() -> Html {
///     let map = use_map(HashMap::from([
///         ("Mercury", 0.4),
///         ("Venus", 0.7),
///         ("Earth", 1.0),
///         ("Mars", 1.5),
///     ]));
///
///     let onset = {
///         let map = map.clone();
///         Callback::from(move |_| map.set(HashMap::from([("Moon", 0.8), ("Earth", 1.0)])))
///     };
///     let oninsert = {
///         let map = map.clone();
///         Callback::from(move |_| {
///             let _ = map.insert("Jupiter", 2.1);
///         })
///     };
///     let onupdate = {
///         let map = map.clone();
///         Callback::from(move |_| map.update(&"Earth", 1.1))
///     };
///     let onremove = {
///         let map = map.clone();
///         Callback::from(move |_| {
///             let _ = map.remove(&"Moon");
///         })
///     };
///     let onretain = {
///         let map = map.clone();
///         Callback::from(move |_| map.retain(|_k, v| v > &mut 1.0))
///     };
///     let onclear = {
///         let map = map.clone();
///         Callback::from(move |_| map.clear())
///     };
///
///     html! {
///         <div>
///             <button onclick={onset}>{ "Set" }</button>
///             <button onclick={oninsert}>{ "Insert" }</button>
///             <button onclick={onupdate}>{ "Update" }</button>
///             <button onclick={onremove}>{ "Remove" }</button>
///             <button onclick={onretain}>{ "Retain" }</button>
///             <button onclick={onclear}>{ "Clear all" }</button>
///             <p>
///                 <b>{ "Current value: " }</b>
///             </p>
///             {
///                 for map.current().iter().map(|(k, v)| {
///                     html! {
///                         <p><b>{ *k }</b> {": "} { v }</p>
///                     }
///                 })
///             }
///         </div>
///     }
/// }
/// ```
pub fn use_map<K, V>(initial_value: HashMap<K, V>) -> UseMapHandle<K, V>
where
    K: 'static,
    V: 'static,
{
    /* implementation omitted */
}