Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/preactjs/preact-render-to-string

:page_facing_up: Universal rendering for Preact: render JSX and Preact components to HTML.
https://github.com/preactjs/preact-render-to-string

html preact preact-components universal

Last synced: about 1 month ago
JSON representation

:page_facing_up: Universal rendering for Preact: render JSX and Preact components to HTML.

Awesome Lists containing this project

README

        

# preact-render-to-string

[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)
[![Build status](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml/badge.svg)](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml)

Render JSX and [Preact](https://github.com/preactjs/preact) components to an HTML string.

Works in Node & the browser, making it useful for universal/isomorphic rendering.

\>\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<

---

### Render JSX/VDOM to HTML

```js
import { render } from 'preact-render-to-string';
import { h } from 'preact';
/** @jsx h */

let vdom =

content
;

let html = render(vdom);
console.log(html);
//

content

```

### Render Preact Components to HTML

```js
import { render } from 'preact-render-to-string';
import { h, Component } from 'preact';
/** @jsx h */

// Classical components work
class Fox extends Component {
render({ name }) {
return {name};
}
}

// ... and so do pure functional components:
const Box = ({ type, children }) => (

{children}

);

let html = render(



);

console.log(html);
//

Finn

```

---

### Render JSX / Preact / Whatever via Express!

```js
import express from 'express';
import { h } from 'preact';
import { render } from 'preact-render-to-string';
/** @jsx h */

// silly example component:
const Fox = ({ name }) => (


{name}

This page is all about {name}.



);

// basic HTTP server via express:
const app = express();
app.listen(8080);

// on each request, render and return a component:
app.get('/:fox', (req, res) => {
let html = render();
// send it back wrapped up as an HTML5 document:
res.send(`${html}`);
});
```

### Error Boundaries

Rendering errors can be caught by Preact via `getDerivedStateFromErrors` or `componentDidCatch`. To enable that feature in `preact-render-to-string` set `errorBoundaries = true`

```js
import { options } from 'preact';

// Enable error boundaries in `preact-render-to-string`
options.errorBoundaries = true;
```

---

### `Suspense` & `lazy` components with [`preact/compat`](https://www.npmjs.com/package/preact)

```bash
npm install preact preact-render-to-string
```

```jsx
export default () => {
return

Home page

;
};
```

```jsx
import { Suspense, lazy } from 'preact/compat';

// Creation of the lazy component
const HomePage = lazy(() => import('./pages/home'));

const Main = () => {
return (
Loading}>


);
};
```

```jsx
import { renderToStringAsync } from 'preact-render-to-string';
import { Main } from './main';

const main = async () => {
// Rendering of lazy components
const html = await renderToStringAsync();

console.log(html);
//

Home page


};

// Execution & error handling
main().catch((error) => {
console.error(error);
});
```

---

### License

[MIT](http://choosealicense.com/licenses/mit/)