Dashboard sipadu mbip
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

Reference.js.flow 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // @flow
  2. import * as React from 'react';
  3. import warning from 'warning';
  4. import { ManagerReferenceNodeSetterContext } from './Manager';
  5. import { safeInvoke, unwrapArray, setRef } from './utils';
  6. import { type Ref } from "./RefTypes";
  7. export type ReferenceChildrenProps = { ref: Ref };
  8. export type ReferenceProps = {
  9. children: ReferenceChildrenProps => React.Node,
  10. innerRef?: Ref,
  11. };
  12. type InnerReferenceProps = {
  13. setReferenceNode?: (?HTMLElement) => void,
  14. };
  15. class InnerReference extends React.Component<
  16. ReferenceProps & InnerReferenceProps
  17. > {
  18. refHandler = (node: ?HTMLElement) => {
  19. setRef(this.props.innerRef, node)
  20. safeInvoke(this.props.setReferenceNode, node);
  21. };
  22. componentWillUnmount() {
  23. setRef(this.props.innerRef, null)
  24. }
  25. render() {
  26. warning(
  27. Boolean(this.props.setReferenceNode),
  28. '`Reference` should not be used outside of a `Manager` component.'
  29. );
  30. return unwrapArray(this.props.children)({ ref: this.refHandler });
  31. }
  32. }
  33. export default function Reference(props: ReferenceProps) {
  34. return (
  35. <ManagerReferenceNodeSetterContext.Consumer>
  36. {(setReferenceNode) => (
  37. <InnerReference setReferenceNode={setReferenceNode} {...props} />
  38. )}
  39. </ManagerReferenceNodeSetterContext.Consumer>
  40. );
  41. }