Skip to content

Instantly share code, notes, and snippets.

@dralletje
Created January 25, 2019 18:20
Show Gist options
  • Select an option

  • Save dralletje/c4674485dd9f916db8217ee2e85175bd to your computer and use it in GitHub Desktop.

Select an option

Save dralletje/c4674485dd9f916db8217ee2e85175bd to your computer and use it in GitHub Desktop.
import React from 'react';
import immutagen from 'immutagen';
export let generator_render = (generator_fn) => {
let { Provider, Consumer } = React.createContext();
let render_subchild = (generator, value) => {
let { value: element, next: next_generator } = generator(value);
return <Provider value={{ generator: next_generator }}>{element}</Provider>;
};
function render() {
let element_this = this || {
get props() {
throw new Error(`Trying to get this.props, but this render function is not bound to a react component :O`);
},
get state() {
throw new Error(`Trying to get this.state, but this render function is not bound to a react component :O`);
}
};
let bound_generator_fn = (...args) => generator_fn.call(element_this, ...args);
let immutable_generator = immutagen(bound_generator_fn);
let resolve = (value) => {
return (
<Consumer>
{({ generator }) => render_subchild(generator, value)}
</Consumer>
);
};
return render_subchild(immutable_generator, resolve);
};
return render;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment