diff --git a/packages/react-native-web/src/exports/AccessibilityInfo/index.js b/packages/react-native-web/src/exports/AccessibilityInfo/index.js
index 7c2f66d253..b69e3f3548 100644
--- a/packages/react-native-web/src/exports/AccessibilityInfo/index.js
+++ b/packages/react-native-web/src/exports/AccessibilityInfo/index.js
@@ -6,6 +6,9 @@
*
* @flow
*/
+
+'use client';
+
import canUseDOM from '../../modules/canUseDom';
function isScreenReaderEnabled(): Promise<*> {
diff --git a/packages/react-native-web/src/exports/ActivityIndicator/index.js b/packages/react-native-web/src/exports/ActivityIndicator/index.js
index 151337204e..64478165c1 100644
--- a/packages/react-native-web/src/exports/ActivityIndicator/index.js
+++ b/packages/react-native-web/src/exports/ActivityIndicator/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { ViewProps } from '../View';
import * as React from 'react';
diff --git a/packages/react-native-web/src/exports/Animated/index.js b/packages/react-native-web/src/exports/Animated/index.js
index 7dcb2222ef..bf3497c1fe 100644
--- a/packages/react-native-web/src/exports/Animated/index.js
+++ b/packages/react-native-web/src/exports/Animated/index.js
@@ -7,5 +7,7 @@
* @flow
*/
+'use client';
+
import Animated from '../../vendor/react-native/Animated/Animated';
export default Animated;
diff --git a/packages/react-native-web/src/exports/AppRegistry/index.js b/packages/react-native-web/src/exports/AppRegistry/index.js
index 25e70c3a06..53a0af51a8 100644
--- a/packages/react-native-web/src/exports/AppRegistry/index.js
+++ b/packages/react-native-web/src/exports/AppRegistry/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { Application } from './renderApplication';
import type { ComponentType, Node } from 'react';
diff --git a/packages/react-native-web/src/exports/AppState/index.js b/packages/react-native-web/src/exports/AppState/index.js
index 3e4fab60a5..c730a0ab18 100644
--- a/packages/react-native-web/src/exports/AppState/index.js
+++ b/packages/react-native-web/src/exports/AppState/index.js
@@ -8,6 +8,8 @@
* @noflow
*/
+'use client';
+
import invariant from 'fbjs/lib/invariant';
import EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';
import canUseDOM from '../../modules/canUseDom';
diff --git a/packages/react-native-web/src/exports/Appearance/index.js b/packages/react-native-web/src/exports/Appearance/index.js
index 40b0fa6b1b..3942859775 100644
--- a/packages/react-native-web/src/exports/Appearance/index.js
+++ b/packages/react-native-web/src/exports/Appearance/index.js
@@ -7,6 +7,9 @@
*
* @flow
*/
+
+'use client';
+
import canUseDOM from '../../modules/canUseDom';
export type ColorSchemeName = 'light' | 'dark';
diff --git a/packages/react-native-web/src/exports/CheckBox/index.js b/packages/react-native-web/src/exports/CheckBox/index.js
index 1df7f3ab7d..144eb90c3b 100644
--- a/packages/react-native-web/src/exports/CheckBox/index.js
+++ b/packages/react-native-web/src/exports/CheckBox/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { ColorValue } from '../../types';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/Clipboard/index.js b/packages/react-native-web/src/exports/Clipboard/index.js
index e17a766e87..6ce3a988cd 100644
--- a/packages/react-native-web/src/exports/Clipboard/index.js
+++ b/packages/react-native-web/src/exports/Clipboard/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
let clipboardAvailable;
export default class Clipboard {
diff --git a/packages/react-native-web/src/exports/Dimensions/index.js b/packages/react-native-web/src/exports/Dimensions/index.js
index ceb971af7f..45c9e519ee 100644
--- a/packages/react-native-web/src/exports/Dimensions/index.js
+++ b/packages/react-native-web/src/exports/Dimensions/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { EventSubscription } from '../../vendor/react-native/vendor/emitter/EventEmitter';
import invariant from 'fbjs/lib/invariant';
import canUseDOM from '../../modules/canUseDom';
diff --git a/packages/react-native-web/src/exports/FlatList/index.js b/packages/react-native-web/src/exports/FlatList/index.js
index b7732a4e7d..bcbc3db8dc 100644
--- a/packages/react-native-web/src/exports/FlatList/index.js
+++ b/packages/react-native-web/src/exports/FlatList/index.js
@@ -8,5 +8,7 @@
* @flow
*/
+'use client';
+
import FlatList from '../../vendor/react-native/FlatList';
export default FlatList;
diff --git a/packages/react-native-web/src/exports/Image/index.js b/packages/react-native-web/src/exports/Image/index.js
index 5a81b0b461..1c0bc8bc64 100644
--- a/packages/react-native-web/src/exports/Image/index.js
+++ b/packages/react-native-web/src/exports/Image/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { ImageProps } from './types';
import * as React from 'react';
diff --git a/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js
index 08cb547f7e..5beae81b87 100644
--- a/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js
+++ b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { LayoutEvent, LayoutValue } from '../../types';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/Modal/index.js b/packages/react-native-web/src/exports/Modal/index.js
index 330a1d56af..89fffbc750 100644
--- a/packages/react-native-web/src/exports/Modal/index.js
+++ b/packages/react-native-web/src/exports/Modal/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { ViewProps } from '../View';
import * as React from 'react';
diff --git a/packages/react-native-web/src/exports/Picker/index.js b/packages/react-native-web/src/exports/Picker/index.js
index fa2fde9a10..27fa5b1472 100644
--- a/packages/react-native-web/src/exports/Picker/index.js
+++ b/packages/react-native-web/src/exports/Picker/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { PlatformMethods } from '../../types';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/Pressable/index.js b/packages/react-native-web/src/exports/Pressable/index.js
index 19d3649129..28118ddcd0 100644
--- a/packages/react-native-web/src/exports/Pressable/index.js
+++ b/packages/react-native-web/src/exports/Pressable/index.js
@@ -7,7 +7,7 @@
* @flow strict-local
*/
-'use strict';
+'use client';
import type { HoverEventsConfig } from '../../modules/useHover';
import type { PressResponderConfig } from '../../modules/usePressEvents/PressResponder';
diff --git a/packages/react-native-web/src/exports/ProgressBar/index.js b/packages/react-native-web/src/exports/ProgressBar/index.js
index d5bca56a61..25069e724b 100644
--- a/packages/react-native-web/src/exports/ProgressBar/index.js
+++ b/packages/react-native-web/src/exports/ProgressBar/index.js
@@ -7,6 +7,8 @@
* @flow
*/
+'use client';
+
import type { ColorValue } from '../../types';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/ScrollView/index.js b/packages/react-native-web/src/exports/ScrollView/index.js
index d387e26273..6b56e894fd 100644
--- a/packages/react-native-web/src/exports/ScrollView/index.js
+++ b/packages/react-native-web/src/exports/ScrollView/index.js
@@ -8,6 +8,8 @@
* @noflow
*/
+'use client';
+
import type { ViewProps, ViewStyle } from '../View/types';
import Dimensions from '../Dimensions';
diff --git a/packages/react-native-web/src/exports/SectionList/index.js b/packages/react-native-web/src/exports/SectionList/index.js
index 01e8365b04..2228ad6593 100644
--- a/packages/react-native-web/src/exports/SectionList/index.js
+++ b/packages/react-native-web/src/exports/SectionList/index.js
@@ -7,5 +7,7 @@
* @flow
*/
+'use client';
+
import SectionList from '../../vendor/react-native/SectionList';
export default SectionList;
diff --git a/packages/react-native-web/src/exports/Switch/index.js b/packages/react-native-web/src/exports/Switch/index.js
index 4f3e659d8e..93282f621e 100644
--- a/packages/react-native-web/src/exports/Switch/index.js
+++ b/packages/react-native-web/src/exports/Switch/index.js
@@ -7,6 +7,8 @@
* @flow
*/
+'use client';
+
import type { ColorValue } from '../../types';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/Text/TextAncestorContext.js b/packages/react-native-web/src/exports/Text/TextAncestorContext.js
index 52a7e2964c..164b271393 100644
--- a/packages/react-native-web/src/exports/Text/TextAncestorContext.js
+++ b/packages/react-native-web/src/exports/Text/TextAncestorContext.js
@@ -7,6 +7,8 @@
* @flow strict
*/
+'use client';
+
import type { Context } from 'react';
import { createContext } from 'react';
diff --git a/packages/react-native-web/src/exports/Text/index.js b/packages/react-native-web/src/exports/Text/index.js
index 071ae10253..316939ee74 100644
--- a/packages/react-native-web/src/exports/Text/index.js
+++ b/packages/react-native-web/src/exports/Text/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { PlatformMethods } from '../../types';
import type { TextProps } from './types';
diff --git a/packages/react-native-web/src/exports/TextInput/index.js b/packages/react-native-web/src/exports/TextInput/index.js
index 83f89af333..c67ffc9e5c 100644
--- a/packages/react-native-web/src/exports/TextInput/index.js
+++ b/packages/react-native-web/src/exports/TextInput/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { PlatformMethods } from '../../types';
import type { TextInputProps } from './types';
diff --git a/packages/react-native-web/src/exports/TouchableHighlight/index.js b/packages/react-native-web/src/exports/TouchableHighlight/index.js
index 7814fcc59f..e96692da39 100644
--- a/packages/react-native-web/src/exports/TouchableHighlight/index.js
+++ b/packages/react-native-web/src/exports/TouchableHighlight/index.js
@@ -8,7 +8,7 @@
* @format
*/
-'use strict';
+'use client';
import type { ColorValue } from '../../types';
import type { Props as TouchableWithoutFeedbackProps } from '../TouchableWithoutFeedback';
diff --git a/packages/react-native-web/src/exports/TouchableOpacity/index.js b/packages/react-native-web/src/exports/TouchableOpacity/index.js
index 5dba64e0ae..c94be1b43b 100644
--- a/packages/react-native-web/src/exports/TouchableOpacity/index.js
+++ b/packages/react-native-web/src/exports/TouchableOpacity/index.js
@@ -8,7 +8,7 @@
* @format
*/
-'use strict';
+'use client';
import type { Props as TouchableWithoutFeedbackProps } from '../TouchableWithoutFeedback';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js b/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js
index e77794a5cb..e2ef7d080a 100644
--- a/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js
+++ b/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js
@@ -8,7 +8,7 @@
* @format
*/
-'use strict';
+'use client';
import type { PressResponderConfig } from '../../modules/usePressEvents/PressResponder';
import type { ViewProps } from '../View';
diff --git a/packages/react-native-web/src/exports/View/index.js b/packages/react-native-web/src/exports/View/index.js
index 18d0c86cf3..573bfe2b5b 100644
--- a/packages/react-native-web/src/exports/View/index.js
+++ b/packages/react-native-web/src/exports/View/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import type { PlatformMethods } from '../../types';
import type { ViewProps } from './types';
diff --git a/packages/react-native-web/src/exports/VirtualizedList/index.js b/packages/react-native-web/src/exports/VirtualizedList/index.js
index e4deb974c5..4badaebd2a 100644
--- a/packages/react-native-web/src/exports/VirtualizedList/index.js
+++ b/packages/react-native-web/src/exports/VirtualizedList/index.js
@@ -7,5 +7,7 @@
* @flow
*/
+'use client';
+
import VirtualizedList from '../../vendor/react-native/VirtualizedList';
export default VirtualizedList;
diff --git a/packages/react-native-web/src/exports/createElement/index.js b/packages/react-native-web/src/exports/createElement/index.js
index 068f85892b..e6a7f172a1 100644
--- a/packages/react-native-web/src/exports/createElement/index.js
+++ b/packages/react-native-web/src/exports/createElement/index.js
@@ -7,6 +7,8 @@
* @noflow
*/
+'use client';
+
import AccessibilityUtil from '../../modules/AccessibilityUtil';
import createDOMProps from '../../modules/createDOMProps';
import React from 'react';
diff --git a/packages/react-native-web/src/exports/render/index.js b/packages/react-native-web/src/exports/render/index.js
index 8002132585..c578e3e619 100644
--- a/packages/react-native-web/src/exports/render/index.js
+++ b/packages/react-native-web/src/exports/render/index.js
@@ -7,6 +7,8 @@
* @noflow
*/
+'use client';
+
import {
hydrate as domLegacyHydrate,
render as domLegacyRender
diff --git a/packages/react-native-web/src/exports/useColorScheme/index.js b/packages/react-native-web/src/exports/useColorScheme/index.js
index 2e70d030f1..a2970115d3 100644
--- a/packages/react-native-web/src/exports/useColorScheme/index.js
+++ b/packages/react-native-web/src/exports/useColorScheme/index.js
@@ -8,6 +8,8 @@
* @flow
*/
+'use client';
+
import * as React from 'react';
import type { ColorSchemeName } from '../Appearance';
import Appearance from '../Appearance';
diff --git a/packages/react-native-web/src/exports/useLocaleContext/index.js b/packages/react-native-web/src/exports/useLocaleContext/index.js
index e80b354b89..758320ce87 100644
--- a/packages/react-native-web/src/exports/useLocaleContext/index.js
+++ b/packages/react-native-web/src/exports/useLocaleContext/index.js
@@ -7,5 +7,7 @@
* @flow strict
*/
+'use client';
+
import { useLocaleContext } from '../../modules/useLocale';
export default useLocaleContext;
diff --git a/packages/react-native-web/src/exports/useWindowDimensions/index.js b/packages/react-native-web/src/exports/useWindowDimensions/index.js
index 114e424609..818dbe2d85 100644
--- a/packages/react-native-web/src/exports/useWindowDimensions/index.js
+++ b/packages/react-native-web/src/exports/useWindowDimensions/index.js
@@ -8,7 +8,7 @@
* @flow strict-local
*/
-'use strict';
+'use client';
import type { DisplayMetrics } from '../Dimensions';
diff --git a/packages/react-native-web/src/modules/UnimplementedView/index.js b/packages/react-native-web/src/modules/UnimplementedView/index.js
index f28147cb0c..1cabc94040 100644
--- a/packages/react-native-web/src/modules/UnimplementedView/index.js
+++ b/packages/react-native-web/src/modules/UnimplementedView/index.js
@@ -6,8 +6,8 @@
*
* @flow
*/
-
import type { Node } from 'React';
+import type { ViewProps } from '../../exports/View/types';
import View from '../../exports/View';
import React from 'react';
@@ -15,14 +15,8 @@ import React from 'react';
/**
* Common implementation for a simple stubbed view.
*/
-class UnimplementedView extends React.Component<*, *> {
- render(): Node {
- return (
-
- {this.props.children}
-
- );
- }
+function UnimplementedView({ style, ...props }: ViewProps): Node {
+ return ;
}
const unimplementedViewStyles =