причина реагировать, как лучше справиться с событием? - PullRequest
0 голосов
/ 09 июня 2018

Мне удалось обновить событие, используя фрагмент Интернета, мне очень трудно понять.Вот весь фрагмент:

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 Ответ

0 голосов
/ 12 июня 2018

Нет ничего плохого в том, что вы делаете, и, насколько я знаю, это единственный способ.Я склонен иметь вспомогательную функцию, такую ​​как:

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)))}
/>
...