-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
text_input.rs
31 lines (26 loc) · 926 Bytes
/
text_input.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use wasm_bindgen::{JsCast, UnwrapThrowExt};
use web_sys::{Event, HtmlInputElement, InputEvent};
use yew::prelude::*;
#[derive(Clone, PartialEq, Properties)]
pub struct Props {
pub value: String,
pub on_change: Callback<String>,
}
fn get_value_from_input_event(e: InputEvent) -> String {
let event: Event = e.dyn_into().unwrap_throw();
let event_target = event.target().unwrap_throw();
let target: HtmlInputElement = event_target.dyn_into().unwrap_throw();
web_sys::console::log_1(&target.value().into());
target.value()
}
/// Controlled Text Input Component
#[function_component(TextInput)]
pub fn text_input(props: &Props) -> Html {
let Props { value, on_change } = props.clone();
let oninput = Callback::from(move |input_event: InputEvent| {
on_change.emit(get_value_from_input_event(input_event));
});
html! {
<input type="text" {value} {oninput} />
}
}