簡體   English   中英

如何在hook中返回state的字符串值?

[英]How to return string value of state in hook?

在 use_effect_with_deps 中返回字符串 state 給出錯誤。

use std::ops::Deref;
use yew::prelude::*;


#[hook]
pub fn use_hook_test() -> String
{
    let first_load = use_state(|| true);

    let hash_state = use_state(|| "".to_owned());

 
    let hash_state_clone = hash_state.clone();
    use_effect_with_deps(move |_| {
        if *first_load {
            wasm_bindgen_futures::spawn_local(async move {

                    hash_state_clone.set(format!("{:?}", "Hello"));
                
            });

            first_load.set(false);
        }
        || {};
    }, ());

    hash_state_clone.deref().clone()
}

錯誤:

let hash_state_clone = hash_state.clone();
   |         ---------------- move occurs because `hash_state_clone` has type `yew::UseStateHandle<std::string::String>`, which does not implement the `Copy` trait
14 |     use_effect_with_deps(move |_| {
   |                          -------- value moved into closure here
...
18 |                     hash_state_clone.set(format!("{:?}", "Hello"));
   |                     ---------------- variable moved due to use in closure
...
27 |     hash_state_clone.deref().clone()
   |     ^^^^^^^^^^^^^^^^^^^^^^^^ value borrowed here after move

這是一個基於您的示例的Yew Playground ,並進行了一些小改動:

  • 添加了一個明確的 scope 來隔離use_effect_with_deps
  • 在 scope 之后添加了第二個hash_state.clone()

結果有點荒謬,但可以編譯。

#[hook]
pub fn use_hook_test() -> String
{
    let first_load = use_state(|| true);
    let hash_state = use_state(|| "".to_owned());
    {
        let hash_state_clone = hash_state.clone();
        use_effect_with_deps(move |_| {
            if *first_load {
                wasm_bindgen_futures::spawn_local(async move {
                    hash_state_clone.set(format!("{:?}", "Hello"));
                });
                first_load.set(false);
            }
            || {};
        }, ());
    }

    let hash_state_clone = hash_state.clone();
    hash_state_clone.deref().clone()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM