Skip to content

Commit 394b17e

Browse files
authored
Update custom renderer docs
1 parent 188c425 commit 394b17e

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

packages/react-reconciler/README.md

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ This is an experimental package for creating custom React renderers.
1111
```js
1212
var Reconciler = require('react-reconciler');
1313

14-
var ReconcilerConfig = {
14+
var HostConfig = {
1515
// You'll need to implement some methods here.
1616
// See below for more information and examples.
1717
};
1818

19-
var MyRenderer = Reconciler(ReconcilerConfig);
19+
var MyRenderer = Reconciler(HostConfig);
2020

2121
var RendererPublicAPI = {
2222
render(element, container, callback) {
@@ -30,10 +30,30 @@ module.exports = RendererPublicAPI;
3030

3131
## Practical Examples
3232

33-
* [React ART](https://github.com/facebook/react/blob/master/packages/react-art/src/ReactART.js)
34-
* [React DOM](https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOM.js)
35-
* [React Native](https://github.com/facebook/react/blob/master/packages/react-native-renderer/src/ReactNativeRenderer.js)
33+
A "host config" is an object that you need to provide, and that describes how to make something happen in the "host" environment (e.g. DOM, canvas, console, or whatever your rendering target is). It looks like this:
3634

37-
If these links break please file an issue and we’ll fix them. They intentionally link to the latest versions since the API is still evolving.
35+
```js
36+
var HostConfig = {
37+
createInstance(type, props) {
38+
// e.g. DOM renderer returns a DOM node
39+
},
40+
// ...
41+
supportsMutation: true, // it works by mutating nodes
42+
appendChild(parent, child) {
43+
// e.g. DOM renderer would call .appendChild() here
44+
},
45+
// ...
46+
};
47+
```
48+
49+
The full list of supported methods [can be found here](https://github.com/facebook/react/blob/master/packages/react-reconciler/src/forks/ReactFiberHostConfig.custom.js). For their signatures, we recommend looking at specific examples below.
50+
51+
The React repository includes several renderers. Each of them has its own host config.
52+
53+
The examples in the React repository are declared a bit differently than a third-party renderer would be. In particular, the `HostConfig` object mentioned above is never explicitly declared, and instead is a *module* in our code. However, its exports correspond directly to properties on a `HostConfig` object you'd need to declare in your code:
54+
55+
* [React ART](https://github.com/facebook/react/blob/master/packages/react-art/src/ReactART.js) and its [host config](https://github.com/facebook/react/blob/master/packages/react-art/src/ReactARTHostConfig.js)
56+
* [React DOM](https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOM.js) and its [host config](https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOMHostConfig.js)
57+
* [React Native](https://github.com/facebook/react/blob/master/packages/react-native-renderer/src/ReactNativeRenderer.js) and its [host config](https://github.com/facebook/react/blob/master/packages/react-native-renderer/src/ReactNativeHostConfig.js)
3858

39-
This [third-party tutorial](https://github.com/nitin42/Making-a-custom-React-renderer) is relatively up-to-date and may be helpful.
59+
If these links break please file an issue and we’ll fix them. They intentionally link to the latest versions since the API is still evolving. If you have more questions please file an issue and we’ll try to help!

0 commit comments

Comments
 (0)