mas*_*onk 7 reactjs typescript-typings typescript2.0
textarea 表单的 onChange 属性需要一个React.EventHandler<React.FormEvent<HTMLTextAreaElement>>.
深入兔子洞,我们发现
interface EventHandler<E extends SyntheticEvent<any>> {
(event: E): void;
}
type FormEventHandler<T> = EventHandler<FormEvent<T>>;
/* ... */
interface FormEvent<T> extends SyntheticEvent<T> {
}
Run Code Online (Sandbox Code Playgroud)
换句话说,onChange 只是需要一个接受 FormEvent 并返回 void 的函数,而 FormEvent 目前与 SyntheticEvent 相同。
问题在于SyntheticEvent<T>.target: EventTarget,并EventTarget没有定义value。
我注意到还有currentTarget: EventTarget & T,其中 T 是HTMLTextInputArea,并且似乎已经定义了值。但表单处理页面显示 event.target正在查看,而不是event.currentTarget。有什么不同?我应该遵循打字还是文档?
编辑:我回答了我自己的问题。currentTarget是我将处理程序绑定到的元素,并且target是接收引发此事件的操作的元素。我想我总是想从 读取值currentTarget,所以在这种情况下,我认为打字引导我正确,而文档引导我错误。
您的编辑是正确的。
这是一个简单的问题,但不幸的是,这个臭名昭著的currentTarget/target难题导致了一场有趣的 React 类型编辑战。React 文档使用的原因target是因为它对子元素没有影响,并且它们重视简单性,如下所示:
https://github.com/facebook/react/pull/9279
如果您需要更彻底的参考来使事情焕然一新,您可以阅读我对此主题的干预之一:
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11508#issuecomment-256045682
| 归档时间: |
|
| 查看次数: |
3790 次 |
| 最近记录: |