-1

Calling the same function again gives move error.

use gloo::console::log;
use yew::prelude::*;
use web_sys::HtmlInputElement;
use wasm_bindgen::JsCast;
#[function_component(CheckMnemonic)]
pub fn check_mnemonic() -> Html {
    let tags_state: UseStateHandle<Vec<String>> = use_state(||vec![]);
    let tags_state_clone1 = tags_state.clone();
    let tags_state_clone2 = tags_state.clone();

    let remove_tag = |index: usize| {
        let mut tags: Vec<_> = tags_state_clone1.to_vec();
        tags.remove(index);
        tags_state_clone1.set(tags);
    };

    let add_tag =  Callback::from(move |event: MouseEvent| {
        let data = event
            .target()
            .unwrap()
            .unchecked_into::<HtmlInputElement>()
            .value();
        let mut tags: Vec<_> = tags_state_clone2.to_vec();
        tags.push(data.trim().to_owned());
        tags_state_clone2.set(tags.clone());
        log!(format!("{:?}", tags));
    });

    let countries = vec!["India", "Norway", "Bhutan"];

    html! {
        <>
        {for tags_state.iter().map(|v| {
          html! {
            <p> {v} </p>
          }
        })}

        { for countries.iter().map(|cont| {
            html!{
                <input type="text" class="form-control" readonly=true value={*cont} onclick={add_tag}/> // New code: Sending props
            }
        })}
       

    


        </>
    }
}

Error:

error[E0507]: cannot move out of `add_tag`, a captured variable in an `FnMut` closure
  --> src/components/accounts/multistep_account_creation/check_mnemonic.rs:45:94
   |
21 |     let add_tag =  Callback::from(move |event: MouseEvent| {
   |         ------- captured outer variable
...
43 |         { for countries.iter().map(|cont| {
   |                                    ------ captured by this `FnMut` closure
44 |             html!{
45 |                 <input type="text" class="form-control" readonly=true value={*cont} onclick={add_tag}/> // New code: Sending props
   |                                                                                              ^^^^^^^ move occurs because `add_tag` has type `yew::Callback<web_sys::MouseEvent>`, which does not implement the `Copy` trait
Amiya Behera
  • 2,210
  • 19
  • 32

1 Answers1

1

Sorry, add_tag.clone() solved the issue

<input type="text" class="form-control" readonly=true value={*cont} onclick={add_tag.clone()}/> // New code: Sending props
Amiya Behera
  • 2,210
  • 19
  • 32