2024 Update: ReactDOM.render is no longer supported in React 18. Isolated change to use createRoot and avoid your app behaving as if it's running React 17.
React Mounter lets you mount React components to DOM easily.
React Mounter supports Server Side Rendering when used with FlowRouter.
Normally, when you are rendering a React Component to the DOM, you need to do following things basically,
- Create a root DOM node as the root node for React
- Wait for the DOM to load properly
- Then render the component
React Mounter does all these for you. You just ask it to render a component.
Additionally, React Mounter can work as a simple Layout Manager where you can use with Flow Router.
Install with:
npm i --save react-mounter react react-dom
react
andreact-dom
are peerDependencies ofreact-mounter
. So, you need to install them into your app manually.
Then let's mount a component.
import React from 'react';
import {mount} from 'react-mounter';
const WelcomeComponent = ({name}) => (<p>Hello, {name}</p>);
mount(WelcomeComponent, {name: 'Arunoda'});
You can user react-mounter
as a layout Manager for Flow Router. Here's how to do it.
Let's say we've a layout called MainLayout.
const MainLayout = ({content}) => (
<div>
<header>
This is our header
</header>
<main>
{content}
</main>
</div>
);
Now let's try render to our WelcomeComponent
into the MainLayout
.
mount(MainLayout, {
content: <WelcomeComponent name="Arunoda" />
});
That's it.
In order to use the React context, you need to render the content
component inside the layout. So we need to pass a function instead of the React element. Here's how to do it.
const MainLayout = ({content}) => (
<div>
<header>
This is our header
</header>
<main>
{content()}
</main>
</div>
);
See, now content is a function.
Then, we can pass the Welcome component like this:
mount(MainLayout, {
content: () => (<WelcomeComponent name="Arunoda" />)
});
By default React Mounter render our components into a DOM node called react-root
. But, you can configure if by like below:
const {mount, withOptions} from `react-mounter`;
const mount2 = withOptions({
rootId: 'the-root',
rootProps: {'className': 'some-class-name'}
}, mount);
mount2(WelcomeComponent, {name: 'Arunoda'});
SSR is supported when used with FlowRouter SSR. Checkout this sample app.