原因反应如何更好地处理事件?
reason react how to handle event better?
我设法让事件更新,使用网络片段,我真的很难理解。这是整个片段:
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))}
没有更好的方法吗?好像很绕..
你所做的没有任何问题,据我所知,这是唯一的方法。我倾向于使用辅助函数,例如:
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)))}
/>
我设法让事件更新,使用网络片段,我真的很难理解。这是整个片段:
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))}
没有更好的方法吗?好像很绕..
你所做的没有任何问题,据我所知,这是唯一的方法。我倾向于使用辅助函数,例如:
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)))}
/>