Electron extensions to React Native for Web
This project aims to provide extensions to React Native for Web targeted to the Electron environment to support additional modules exposed by React Native (ex Clipboard, WebView) using Electron APIs.
This is very early stage, not fully tested, and APIs will likely change between releases, so don't use this library if you need something stable.
npm install react-native-electron
electron
, react
and react-native-web
are required peer dependencies, make sure to install them as well:
npm install electron react react-native-web
react-art
is also needed if you use ART
.
See the example
directory for the source code and Webpack config.
To run the demo app, fork this repository and run:
npm install
npm run example:server
- In another terminal instance,
npm run example:electron
This module can be used with Expo application (created by expo-cli
) using the following steps:
- Follow this guide's setup
- Run
yarn expo-electron customize
in order to eject expo-electron's webpack configuration - Edit
./electron/webpack.config.js
as follows:
const { withExpoWebpack } = require('@expo/electron-adapter');
module.exports = config => {
let expoConfig = withExpoWebpack(config);
expoConfig.resolve.alias['react-native$'] = 'react-native-electron';
return expoConfig;
};
Note this is a partial solution, as Expo's default webpack configuration includes more aliases to react-native
, but it should cover all of react-native-electron
's APIs.
React Native's Alert implementation using Electron's dialog
Alert.alert(
title: string,
message: ?string,
buttons: ?Array<{text: string, onPress?: () => void}> = [],
type: ?('none' | 'info' | 'error' | 'question' | 'warning') = 'none'
): void
React Native's Appearance implementation using Electron's nativeTheme
Appearance.getColorScheme(): 'light' | 'dark' | null
React Native's Clipboard implementation using Electron's clipboard.
Clipboard.getString(type: ?string): Promise<?string>
Clipboard.setString(text: string, type: ?string): void
React Native's Linking implementation using Electron's app and shell APIs.
Linking.openURL(url: string): Promise<void>
Linking.addEventListener(type: string, handler: Function): void
Linking.removeEventListener(type: string, handler: Function): void
Linking.canOpenURL(): Promise<true>
: always resolves to true
Linking.getInitialURL(): Promise<?string>
: resolves with the process.argv[1]
value, expecting the app to be opened by a command such as myapp myapp://test
useColorScheme(): 'light' | 'dark' | null
MIT
See LICENSE file.