Skip to content

Instantly share code, notes, and snippets.

@lynlevenick
lynlevenick / crank-weird-useInterval.tsx
Created April 28, 2020 22:12
Implementation of `useInterval` and a basic metronome in Crank.js
/* @jsx createElement */
import { createElement } from "@bikeshaving/crank/cjs";
function* useIntervalInternal(cb: () => void) {
// unfortunately pretty convoluted to deal with
// setup and teardown? You could probably implement
// the useState and useEffect APIs here tbh
let interval = undefined;
try {
@lynlevenick
lynlevenick / crank-useEffect.tsx
Created April 28, 2020 22:14
Implementation of `useEffect` and a basic metronome in Crank.js
/* @jsx createElement */
import { createElement } from "@bikeshaving/crank/cjs";
type EffectCleanup = undefined | (() => void);
function* useEffectInternal<F extends (...args: any[]) => EffectCleanup>(
effect: F
): Generator<void, void, Parameters<F>> {
let dependencies = yield;
let cleanup: EffectCleanup = effect(...dependencies);