• Stars
    star
    263
  • Rank 155,624 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 8 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Make your async components compact and descriptive by leveraging the power of the language features

React Coroutine

npm install react-coroutine

Coroutines are computer program components that generalize subroutines for nonpreemptive multitasking, by allowing multiple entry points for suspending and resuming execution at certain locations. Coroutines are well-suited for implementing more familiar program components such as cooperative tasks, exceptions, event loop, iterators, infinite lists and pipes.
β€” Wikipedia

Describe complex async state flows in your React components using only language features like generators, async functions, and async generators.

No API or new abstractions to learn, only JavaScript code as it intended to be.

Motivation

React Coroutine attempts to use basic and known language features for the sake of solving problems that are usually solved with APIs and new abstractions that require particular knowledge about them or, sometimes, about internal processes.

Examples

import React from 'react';
import Coroutine from 'react-coroutine';
async function UserListContainer() {
  try {
    // Wait for async data and render it in the same way as plain components
    let users = await Users.retrieve();
    return <UserList users={users} />;
  } catch (error) {
    // Handle failures in place with just JavaScript tools
    return <ErrorMessage error={error} />;
  }
}

export default Coroutine.create(UserListContainer);
async function* PokemonInfoPage({ pokemonId, pokemonName }) {
  // Use generators to provide multiple render points of your async component
  yield <p>Loading {pokemonName} info...</p>;

  // Easily import components asynchronously and render them on demand
  let { default: PokemonInfo } = await import('./PokemonInfo.react');
  let data = await PokemonAPI.retrieve(pokemonId);

  return <PokemonInfo data={data} />;
}

export default Coroutine.create(PokemonInfoPage);
function* MovieInfoLoader({ movieId }) {
  // Assuming cache.read() return a value from cache or Promise
  let movieData = yield movieCache.read(movieId);
  return <MovieInfo data={movieData} />;
}

export default Coroutine.create(MovieInfoLoader);

Documentation

See details page for more.

Installation

React Coroutine project is available as the react-coroutine package on NPM. Installed package includes precompiled code (ECMAScript 5), ES Modules-friendly artifact, LICENSE, and the changelog.

Contributing

Current project has adopted a Code of Conduct which is expected to be adhered by project participants. Please also visit the document website to learn more.

Please read the contributing guide to learn how to propose bug fixes and improvements, and how to build and test your changes.

More Repositories

1

picocolors

The tiniest and the fastest library for terminal output formatting with ANSI colors
JavaScript
1,278
star
2

jest-webdriver

Connect Jest tests to Selenium WebDriver
JavaScript
223
star
3

dataclass

Data classes for TypeScript & JavaScript
JavaScript
174
star
4

react-warehouse

React resource loader implementation
JavaScript
34
star
5

gulp-complexity

A JavaScript complexity analysis gulp task.
JavaScript
30
star
6

flux-stateful

Straightforward implementation for Flux stores. Maintain state easily.
JavaScript
30
star
7

gulp-jsinspect

A JavaScript copy-paste analysis gulp task.
JavaScript
20
star
8

newsletter

Observer done right
JavaScript
13
star
9

dgelong

A JavaScript Implementation of Useful First-class Citizens.
JavaScript
13
star
10

retransmitter

Async-friendly stateful React containers
JavaScript
12
star
11

selectre

Time & Space Efficient State Selectors
TypeScript
11
star
12

reflux-stateful

React-like state management in your Reflux stores.
JavaScript
10
star
13

redux-suspense

Enforcing better code patterns in existing Redux-based applications
JavaScript
9
star
14

babel-plugin-style-literal

Compile tagged string literal with CSS to a plain object with JSX inline styles
JavaScript
8
star
15

actor-system

Build robust and resilient message-driven systems
JavaScript
8
star
16

layout-elements

Layout primitive that abstracts flexbox.
JavaScript
6
star
17

string-interpolate

Simple string interpolation
JavaScript
5
star
18

distribution-chart

React + D3 + React Motion
JavaScript
5
star
19

use-bounding-rect

A tiny React hook to access DOM Rect of an element dynamically.
JavaScript
4
star
20

access-object

Data Access Object for your resources.
JavaScript
3
star
21

flux-guidelines

Comprehensive guide for idiomatic Flux
3
star
22

message-script

A set of tools for creating message-driven systems in JavaScript
JavaScript
3
star
23

node-bump

Update project version and create tag easily
JavaScript
2
star
24

dataflow-comparison

JavaScript
2
star
25

modular

Run your CJS Modules in browser without any build scripts. Simple CommonJS Module/1.1 proposal implementation
JavaScript
2
star
26

react-datablocks

Seamless arbitrary data visualization
JavaScript
2
star
27

gulp-wrap-exports

Wrap CommonJS module in IIFE and create global variable for browser
JavaScript
2
star
28

react-handle-event

JavaScript
2
star
29

md-reader

Parse and read Markdown files in browser
CSS
1
star
30

react-ux

JavaScript
1
star
31

OctoRobot

Web application for making predictions.
JavaScript
1
star
32

npm-shrink

Make sure you don't use unreliable packages. Help people with contributing in their projects.
JavaScript
1
star
33

touchy-things

https://alexeyraspopov.github.io/touchy-things
HTML
1
star
34

engineer-vs-developer

HTML
1
star
35

react-suspense-sandbox

Experimenting with React Suspense
JavaScript
1
star
36

parcel-transformer-inline-css-modules

1
star
37

react-viz

React, D3, and stuff
HTML
1
star
38

monorepo

Simple monorepo setup with NPM Workspaces
JavaScript
1
star
39

dotfiles

A collection of frontend-related config files
1
star
40

learn-script

A JavaScript implementation of machine learning algorithms.
JavaScript
1
star
41

dom-walker

DOM Walker based on TreeWalker API
JavaScript
1
star
42

testing-example

JavaScript
1
star
43

alexeyraspopov.github.io

Personal site
1
star
44

async-structure

Set of advanced pattern implementations for dealing with async data and flows
JavaScript
1
star
45

heapsort

A JavaScript Heapsort Algorithm Implementation
JavaScript
1
star
46

modalify

🚧 WCAG compliant, mobile ready, framework agnostic modal dialogs implementation
JavaScript
1
star
47

parcel-plugin-flow

πŸ“¦Seamlessly integrate Flow type checking to your Parcel-based project
JavaScript
1
star
48

halstead

A JavaScript implementation of Halstead complexity measures.
JavaScript
1
star