1
use gloo::console::log;
use std::ops::Deref;
use web_sys::FileList;
use yew::prelude::*;


let filelist: UseStateHandle<Vec<FileList>> = use_state(|| vec![]);

Callback::from(move |event: DragEvent| {
    event.prevent_default();
    let files = event.data_transfer().unwrap().files();
    // log!(files);
    let cloned_filelist = filelist.clone();
    let mut filelistvalue = *cloned_filelist.deref().clone();
    // filelist_vec.push(files);   
})

*cloned_filelist.deref().clone() gives a slice [FileList] instead of Vec<FileList>

How can I use get a Vec from use_state and mutate it?

cafce25
  • 15,907
  • 4
  • 25
  • 31
Amiya Behera
  • 2,210
  • 19
  • 32
  • You don't need to import [`Deref`](https://doc.rust-lang.org/std/ops/trait.Deref.html) (you seldomly need to for things in `std::ops` unless you're implementing them), just use `*cloned_filelist`. – cafce25 Dec 07 '22 at 10:27

1 Answers1

3

You can use to_vec for that:

use yew::prelude::*;
#[derive(Clone)]
struct FileList;
#[function_component(Main)]
fn main() -> Html {
    let filelist: UseStateHandle<Vec<FileList>> = use_state(|| vec![]);
    let files = FileList;
    let mut cloned: Vec<_> = filelist.to_vec();
    cloned.push(files);
    filelist.set(cloned);
    todo!()
}
cafce25
  • 15,907
  • 4
  • 25
  • 31