Skip to main content

React Async

React Async provides a way for React components to subscribe for observable values.

Installation

React Async is packaged on npm:
 $ npm install react-async  

Basic usage

React Async provides a component decorator @Async which given a set of observable specifications wraps a regular React component and returns a new one which subscribes to observables and re-renders the component when new data arrives.
The basic example looks like:
 import React from 'react';  
 import Async from 'react-async';  
 import Rx from 'rx';  
 function defineXHRObservable(url) {  
  return {  
   id: url,  
   start() {  
    return Rx.fromPromise(fetch(url))  
   }  
  }  
 }  
 function MyComponentObservables(props) {  
  return {  
   user: defineXHRObservable(`/api/user?user${props.userID}`)  
  }  
 }  
 @Async(MyComponentObservables)  
 class MyComponent extends React.Component {  
  render() {  
   let {user} = this.props  
   ...  
  }  
 }  
The @Async decorator injects data from observables via props so in render() method of the user property will contain the data fetched via XHR.

Rendering async components on server with fetched async state

While React provides renderToString(element) function which can produce markup for a component, this function is synchronous. That means that it can't be used when you want to get markup from server populated with data.
React Async provides another version of renderToString(element) which is asynchronous and fetches all data defined in observable specifications before rendering a passed component tree.
First, you'd need to install fibers package from npm to use that function:
 $ npm install fibers  
Then use it like:
 import {renderToString} from 'react-async';  
 renderToString(  
  <Component />,  
  function(err, markup) {  
   // send markup to browser  
  })  
This way allows you to have asynchronous components arbitrary deep in the hierarchy.

Note: Special thanks to Andrey Popp

Contact Me - 8mayday@gmail.com

Disclaimer: The blog is created to share react components information to geek, curious ReactJS Developers.

Comments

Popular posts from this blog

react-bootstrap

Bootstrap 3 components built with React https://react-bootstrap.github.io/ Docs See the documentation with live editable examples. Related modules react-router-bootstrap – Integration with React Router React Bootstrap Extended - A version of React Bootstrap where each component has extra props that map to bootstrap's utility classes. For example, pullRight adds the class pull-right to a component. Local setup Install the dependencies with npm install Run tests npm test Run tests in watch mode npm run tdd Run the docs site in development mode with npm run docs. This will watch for file changes as you work. Simply refresh the page to see the updates. Build with npm run build Note: Special thanks to react-bootstrap Contact Me - mtscout6+react-bootstrap@gmail.com Disclaimer: The blog is created to share react components information to geek, curious ReactJS Developers.

React CSS components

Motivation Define React presentational components with CSS (or even SASS or Less if you like). The implementation is based on CSS modules. In fact React CSS Components is just a thin API on top of CSS modules. NOTE: The current implementation is based on Webpack but everything is ready to be ported onto other build systems (generic API is here just not yet documented). Raise an issue or better submit a PR if you have some ideas. Installation & Usage Install from npm: npm install react-css-components style-loader css-loader Configure in webpack.config.js: module.exports = { ... module: { loaders: [ { test: /\.react.css$/, loader: 'react-css-components', } ] } ... } Now you can author React components in Styles.react.css: Label { color: red; } Label:hover { color: white; } And consume them like regular React components: import {Label} from './styles.react.css' <Lab...

Declarative router component for React.

http://strml.viewdocs.io/react-router-component Project Overview Usage is as simple as just returning a configured router component from your component's render() method: <Locations> <Location path="/" handler={MainPage} /> <Location path="/users/:username" handler={UserPage} /> <Location path="/search/*" handler={SearchPage} /> <Location path={/\/product\/([0-9]*)/} handler={ProductPage} /> </Locations> Having routes defined as a part of your component hierarchy allows to dynamically reconfigure routing based on your application state. For example you can return a different set of allowed locations for anonymous and signed-in users. React router component can dispatch based on location.pathname or location.hash if browser doesn't support History API (see hash routing ). Props can be passed through the router by setting them directly on each , or to all possible routes via a childPro...