JSFiddle - React, Tailwind, and code Playground

by Josh Pullen

JavaScript

let listenCallback;

function createSignal(initialValue) {
	let signal = {
  	value: initialValue,
  	get() {
    	/* signal.listenCallbacks.push(listenCallback) */
    	return signal.value;
    },
    set(newValue) {
      signal.value = newValue;
      for (const callback of signal.listenCallbacks) {
      	callback();
      }
    },
    listenCallbacks: []
  };

	return [signal.get, signal.set];
}

function reactive(callback) {
  const run = () => {
  	listenCallback = run;
    callback();
  }
  
  run();
}

const [value, setValue] = createSignal(0);

setInterval(() => {
	setValue(value() + 1);
}, 500);

reactive(() => {
	console.log(value());
});