2016-08-06 1 views
3

Является ли аннотирование обратного вызова ref как элемента HTMLElement наилучшим подходом? Я предполагаю, что в 99% случаев это будет тип, нет?Аннотирование обратного вызова ref

https://facebook.github.io/react/docs/more-about-refs.html

https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md

<input type="text" ref={(ref: HTMLElement) => this.myTextInput = ref} /> 

ответ

3

На данный момент поток не особенно понимает ref собственности, и позволит вам установить ref свойство к чему-либо. Я не мог найти проблему GitHub, отслеживая это, so I opened one.

Насколько это касается Flow, все, что он заботится о том, что это выражение, которое вы передаете параметру typechecks ref. Так что это позволит вам написать

<Foo ref={123} /> 

но не

<Foo ref={"boom" * 10} /> 

Я не эксперт по Реагировать реф, но да, это звучать как input элемент будет принят в HTMLInputElement, который является подтипом HTMLElement. Поэтому использование HTMLElement или HTMLInputElement должно выражать то, что вы намерены.

+0

Спасибо за открытие проблемы и ответ. – Greg

+0

HTMLElement выглядит нормально, но будет ли он работать и с SVG? Я ничего не могу с этим поделать, и API, похоже, немного отличаются (если я использую HTMLElement, то Flow беспокоится, что я вызываю .getBBox, что похоже на svg) –