GitXplorerGitXplorer
a

react-coroutine

public
264 stars
11 forks
3 issues

Commits

List of commits on branch master.
Unverified
9f6f9d732b4489df336ab2f29ebafb548d64a747

jest environment

ddmfilipenko committed 6 years ago
Unverified
4edd1207cb0d6cf9f4c99afeaedc00f7614d15fe

move side effect to render()

aalexeyraspopov committed 7 years ago
Unverified
e242972a550e6413621ebc8f7ebadceb026d8e33

drop support of sync generators

aalexeyraspopov committed 7 years ago
Unverified
d72533b6de45905563df99db48c4ce24a19fc1a6

add timing motion to examples list

aalexeyraspopov committed 7 years ago
Unverified
43fff70600e7ad2f7d721154fc81ca9c2ae79089

Merge branch 'master' of github.com:alexeyraspopov/react-coroutine

aalexeyraspopov committed 7 years ago
Unverified
5b5d85cfa339bd175e4968a10df5e5b1f542639c

update parcel

aalexeyraspopov committed 7 years ago

README

The README file for this repository.

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.