Причина реагировать, как лучше справиться с событием?
Мне удалось получить событие, чтобы обновить, используя фрагмент сети, мне действительно трудно понять. Вот весь фрагмент:
type state = {
login: string,
password: string
};
type action =
| SetLogin(string)
| SetPassword(string);
let component = ReasonReact.reducerComponent("Login");
let make = (_children) => {
...component,
initialState: ()=> { login: "", password: "" },
reducer: (action, state) =>
switch (action) {
| SetLogin (data) => ReasonReact.Update({...state, login: data })
| SetPassword (data) => ReasonReact.Update({...state, password: data })
},
render: self =>
<div>
(ReasonReact.string("login"))
<input
value=self.state.login
onChange={ev => self.send(SetLogin(ReactDOMRe.domElementToObj(ReactEventRe.Form.target(ev))##value))}
/>
(ReasonReact.string("password"))
<input
value=self.state.password
_type="password"
onChange={ev => self.send(SetPassword(ReactDOMRe.domElementToObj(ReactEventRe.Form.target(ev))##value))}
/>
</div>
};
Я смотрю на строку onChange, в частности:
onChange={ev => self.send(SetLogin(ReactDOMRe.domElementToObj(ReactEventRe.Form.target(ev))##value))}
Разве нет лучшего способа сделать это? Это кажется действительно запутанным..
1 ответ
Решение
Нет ничего плохого в том, что вы делаете, и, насколько я знаю, это единственный способ. Я склонен иметь вспомогательную функцию, такую как:
let getValueFromEvent = event : string => (
event
|> ReactEventRe.Form.target
|> ReactDOMRe.domElementToObj
)##value;
тогда это немного очистит вещи:
<input
value=self.state.password
_type="password"
onChange={event => self.send(SetPassword(getValueFromEvent(event)))}
/>