mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Define HostInstance type for React Native (#31101)
## Summary Creates a new `HostInstance` type for React Native, to more accurately capture the intent most developers have when using the `NativeMethods` type or `React.ElementRef<HostComponent<T>>`. Since `React.ElementRef<HostComponent<T>>` is typed as `React.AbstractComponent<T, NativeMethods>`, that means `React.ElementRef<HostComponent<T>>` is equivalent to `NativeMethods` which is equivalent to `HostInstance`. ## How did you test this change? ``` $ yarn $ yarn flow fabric ```
This commit is contained in:
+12
-17
@@ -112,31 +112,32 @@ export interface INativeMethods {
|
||||
measure(callback: MeasureOnSuccessCallback): void;
|
||||
measureInWindow(callback: MeasureInWindowOnSuccessCallback): void;
|
||||
measureLayout(
|
||||
relativeToNativeNode: number | ElementRef<HostComponent<mixed>>,
|
||||
relativeToNativeNode: number | HostInstance,
|
||||
onSuccess: MeasureLayoutOnSuccessCallback,
|
||||
onFail?: () => void,
|
||||
): void;
|
||||
setNativeProps(nativeProps: {...}): void;
|
||||
}
|
||||
|
||||
export type NativeMethods = $ReadOnly<{|
|
||||
export type NativeMethods = $ReadOnly<{
|
||||
blur(): void,
|
||||
focus(): void,
|
||||
measure(callback: MeasureOnSuccessCallback): void,
|
||||
measureInWindow(callback: MeasureInWindowOnSuccessCallback): void,
|
||||
measureLayout(
|
||||
relativeToNativeNode: number | ElementRef<HostComponent<mixed>>,
|
||||
relativeToNativeNode: number | HostInstance,
|
||||
onSuccess: MeasureLayoutOnSuccessCallback,
|
||||
onFail?: () => void,
|
||||
): void,
|
||||
setNativeProps(nativeProps: {...}): void,
|
||||
|}>;
|
||||
}>;
|
||||
|
||||
// This validates that INativeMethods and NativeMethods stay in sync using Flow!
|
||||
declare const ensureNativeMethodsAreSynced: NativeMethods;
|
||||
(ensureNativeMethodsAreSynced: INativeMethods);
|
||||
|
||||
export type HostComponent<T> = AbstractComponent<T, $ReadOnly<NativeMethods>>;
|
||||
export type HostInstance = NativeMethods;
|
||||
export type HostComponent<Config> = AbstractComponent<Config, HostInstance>;
|
||||
|
||||
type SecretInternalsType = {
|
||||
computeComponentStackForErrorReporting(tag: number): string,
|
||||
@@ -209,7 +210,7 @@ export type RenderRootOptions = {
|
||||
export type ReactNativeType = {
|
||||
findHostInstance_DEPRECATED<TElementType: ElementType>(
|
||||
componentOrHandle: ?(ElementRef<TElementType> | number),
|
||||
): ?ElementRef<HostComponent<mixed>>,
|
||||
): ?HostInstance,
|
||||
findNodeHandle<TElementType: ElementType>(
|
||||
componentOrHandle: ?(ElementRef<TElementType> | number),
|
||||
): ?number,
|
||||
@@ -218,14 +219,11 @@ export type ReactNativeType = {
|
||||
child: PublicInstance | HostComponent<mixed>,
|
||||
): boolean,
|
||||
dispatchCommand(
|
||||
handle: ElementRef<HostComponent<mixed>>,
|
||||
handle: HostInstance,
|
||||
command: string,
|
||||
args: Array<mixed>,
|
||||
): void,
|
||||
sendAccessibilityEvent(
|
||||
handle: ElementRef<HostComponent<mixed>>,
|
||||
eventType: string,
|
||||
): void,
|
||||
sendAccessibilityEvent(handle: HostInstance, eventType: string): void,
|
||||
render(
|
||||
element: MixedElement,
|
||||
containerTag: number,
|
||||
@@ -247,20 +245,17 @@ type PublicTextInstance = mixed;
|
||||
export type ReactFabricType = {
|
||||
findHostInstance_DEPRECATED<TElementType: ElementType>(
|
||||
componentOrHandle: ?(ElementRef<TElementType> | number),
|
||||
): ?ElementRef<HostComponent<mixed>>,
|
||||
): ?HostInstance,
|
||||
findNodeHandle<TElementType: ElementType>(
|
||||
componentOrHandle: ?(ElementRef<TElementType> | number),
|
||||
): ?number,
|
||||
dispatchCommand(
|
||||
handle: ElementRef<HostComponent<mixed>>,
|
||||
handle: HostInstance,
|
||||
command: string,
|
||||
args: Array<mixed>,
|
||||
): void,
|
||||
isChildPublicInstance(parent: PublicInstance, child: PublicInstance): boolean,
|
||||
sendAccessibilityEvent(
|
||||
handle: ElementRef<HostComponent<mixed>>,
|
||||
eventType: string,
|
||||
): void,
|
||||
sendAccessibilityEvent(handle: HostInstance, eventType: string): void,
|
||||
render(
|
||||
element: MixedElement,
|
||||
containerTag: number,
|
||||
|
||||
Reference in New Issue
Block a user