Summary: Pull Request resolved: https://github.com/facebook/flipper/pull/872 Move all the JS code related to desktop app to "desktop" subfolder. The structure of "desktop" folder: - `src` - JS code of Flipper desktop app executing in Electron Renderer (Chrome) process. This folder also contains all the Flipper plugins in subfolder "src/plugins". - `static` - JS code of Flipper desktop app bootstrapping executing in Electron Main (Node.js) process - `pkg` - Flipper packaging lib and CLI tool - `doctor` - Flipper diagnostics lib and CLI tool - `scripts` - Build scripts for Flipper desktop app - `headless` - Headless version of Flipper app - `headless-tests` - Integration tests running agains Flipper headless version Reviewed By: passy Differential Revision: D20249304 fbshipit-source-id: 9a51c63b51b92b758a02fc8ebf7d3d116770efe9
2.7 KiB
id, title
| id | title |
|---|---|
| react-native | Building a React Native Plugin |
This tutorial requires React Native 0.62 or higher.
Once you have connected Flipper to a React Native application, writing your own Flipper plugin can be done without reaching into the native world.
To expose Flipper to the JavaScript world, the React Native Native Module react-native-flipper needs to be installed in the hosting application by running yarn add react-native-flipper. If you are creating develop a plugin that is distributed as NPM package, make sure to add this to the installation instruction of your package as well!
Registering a new plugin is done by importing addPlugin from "react-native-flipper" and providing it an object that at least implements the method getId (the plugin id that should be used in the desktop plugin as well to make the connection) and two event handlers for the onConnect and onDisconnect events.
These onConnect and onDisconnect events are triggered every time the plugin becomes (in)active in the Flipper desktop application.
If the plugin is a background plugin, these events are triggered typically only once (they might be triggered never, if the Desktop user didn't enable the plugin, or multiple times if they enabled or disabled the plugin a few times).
The onConnect callback receive a connection which can be used to communicate with the backend:
import {addPlugin} from "react-native-flipper"
addPlugin({
getId() {
return 'ReactNativeExamplePlugin';
},
onConnect(connection) {
mammmals.forEach(({ title, pictureUrl }, index) => {
connection.send('newRow', {
id: index,
title,
url: pictureUrl
})
})
},
onDisconnect() {
}
})
You might want to store the connection somewhere to be able to send more events as long as onDisconnect event hasn't been fired.
The connection object can also be used to listen to messages coming from the Desktop plugin. See Client Plugin API for details.
An example plugin to play a little Tic-Tac-Toe between the Flipper Desktop and a React Native app can be found inside this repository as well (run yarn && yarn android in react-native/ReactNativeFlipperExample to start the test project):
- The React Native JavaScript based plugin implementation: FlipperTicTacToe.js
- The Flipper Desktop plugin implementation: rn-tic-tac-toe/index.tsx