All Projects → kmoskwiak → useSSE

kmoskwiak / useSSE

Licence: MIT license
use Server-Side Effect ✨in React SSR app

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to useSSE

quasar-hackernews
HackerNews clone built with Vue 2.0, vue-router & vuex & Quasar Framework, with server-side rendering
Stars: ✭ 25 (-76.42%)
Mutual labels:  server-side-rendering
easywebpack-vue
Vue Webpack Building Solution, Support Vue Server Side Render (SSR), Client Side Render (CSR) Building
Stars: ✭ 29 (-72.64%)
Mutual labels:  server-side-rendering
react-ssr-starter
🔥 ⚛️ A React boilerplate for a universal web app with a highly scalable, offline-first foundation and our focus on performance and best practices.
Stars: ✭ 40 (-62.26%)
Mutual labels:  server-side-rendering
reflect
Static site generator for WordPress.
Stars: ✭ 19 (-82.08%)
Mutual labels:  server-side-rendering
fastify-vite
This plugin lets you load a Vite client application and set it up for Server-Side Rendering (SSR) with Fastify.
Stars: ✭ 497 (+368.87%)
Mutual labels:  server-side-rendering
rogue.js
The "nearly invisible" way to server-render React applications
Stars: ✭ 1,914 (+1705.66%)
Mutual labels:  server-side-rendering
react-loadable-ssr-addon
Server Side Render add-on for React Loadable. Load splitted chunks was never that easy.
Stars: ✭ 68 (-35.85%)
Mutual labels:  server-side-rendering
weblocks
This fork was created to experiment with some refactorings. They are collected in branch "reblocks".
Stars: ✭ 80 (-24.53%)
Mutual labels:  server-side-rendering
stimulus reflex todomvc
An implementation of TodoMVC using Ruby on Rails, StimulusJS, and StimulusReflex
Stars: ✭ 50 (-52.83%)
Mutual labels:  server-side-rendering
react-ssr-hydration
Example of React Server Side Rendering with Styled Components and Client Side Hydration
Stars: ✭ 15 (-85.85%)
Mutual labels:  server-side-rendering
pokedex-nextjs
Get to know the different render methods that the Next.js framework provides by exploring Pokemons
Stars: ✭ 39 (-63.21%)
Mutual labels:  server-side-rendering
angular-prerender
A command line tool to prerender Angular Apps.
Stars: ✭ 123 (+16.04%)
Mutual labels:  server-side-rendering
nuxtjs-nestjs-starter
Starter project for nuxtjs and nestjs all in one integrated.
Stars: ✭ 56 (-47.17%)
Mutual labels:  server-side-rendering
react-data-fetching-components
♻️ Asynchronously load data for your React components with SSR
Stars: ✭ 13 (-87.74%)
Mutual labels:  server-side-rendering
universal-react-redux-typescript-starter-kit
A minimal starter kit with React, Redux, server side rendering, hot reloading, and Webpack 2. 100% TypeScript.
Stars: ✭ 12 (-88.68%)
Mutual labels:  server-side-rendering
workers-react-pwa-example
No description or website provided.
Stars: ✭ 80 (-24.53%)
Mutual labels:  server-side-rendering
cloudwatch-public-metrics
Expose AWS Cloudwatch Metrics as a public HTML page using AWS Lambda and server-side rendering
Stars: ✭ 27 (-74.53%)
Mutual labels:  server-side-rendering
node-amazon
E-commerce website done in Node, and Angular 11 (SSR)
Stars: ✭ 48 (-54.72%)
Mutual labels:  server-side-rendering
antony-nuxt
👏 Codes that Power ouorz.com | A Tiny Little Nuxt.js + WP REST API App 博客前端
Stars: ✭ 21 (-80.19%)
Mutual labels:  server-side-rendering
ragu
🔪 A micro-frontend framework with Server Side Rendering.
Stars: ✭ 85 (-19.81%)
Mutual labels:  server-side-rendering

useSSE

useSSE npm version Node.js CI

useSSE is abbreviation for use server-side effect. It is a custom React hook to perform asynchronous effects both on client and serve side.

npm i use-sse

Usage

Use useSSE to fetch data in component:

import React from "react";
import { useSSE } from "use-sse";

const MyComponent = () => {
  const [data, error] = useSSE(() => {
    return fetch("https://myapi.example.com").then((res) => res.json());
  }, []);

  return <div>{data.title}</div>;
};

All effects will be resolved on server side during rendering.

This is a part of server side render phase. Se an example for the whole code.

const { ServerDataContext, resolveData } = createServerContext();

// We need to render app twice.
// First - render App to reqister all effects
renderToString(
  <ServerDataContext>
    <App />
  </ServerDataContext>
);

// Wait for all effects to finish
const data = await resolveData();

// Inject into html initial data
res.write(data.toHtml());

// Render App for the second time
// This time data form effects will be avaliable in components
const htmlStream = renderToNodeStream(
  <ServerDataContext>
    <App />
  </ServerDataContext>
);

On client side of application use BroswerDataContext:

// This will create context will all data fetched during server side rendering
const BroswerDataContext = createBroswerContext();

hydrate(
  <BroswerDataContext>
    <App />
  </BroswerDataContext>,
  document.getElementById("app")
);

API

useSSE

const [data, error] = useSSE(effect, dependencies);

Params

param type required description example
effect () => Promise<any> true effect function returning promise which resolves to data () => fetch('example.com').then(res=>res.json())
dependencies any[] false list of dependencies like in useEffect []

Returns

Returns an array with two elements [data, error].

  • data - resolved response from effect
  • error - an error if effect rejected or if timeout happend.

createServerContext()

Creates server side context.

const { ServerDataContext, resolveData } = createServerContext();

Returns

ServerDataContext - React context provider component.

<ServerDataContext>
  <App />
</ServerDataContext>

resolveData - function to resolve all effects.

const data = await resolveData(timeout);
param type required default value description
timeout number false undefined max number of ms to wait for effects to resolve

data is an object containing value of context.

Calling data.toHtml(variableName) will return a html script tak with stringified data:

param type required default value description
variableName string false _initialDataContext name of global variable
data.toHtml();
// "<script>window._initialDataContext = { context data };</script>"

Both should be used in server side render function.


createBroswerContext()

Creates client side context.

createBroswerContext(variableName);

params

param type required default value description
variableName string false _initialDataContext name of global variable

returns

BroswerDataContext - React context provider for client side application

<BroswerDataContext>
  <App />
</BroswerDataContext>

Examples

See example directory for React with SSR and useSSE.

The same example is avaliable on CodeSandbox.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].