Skip to content

Instantly share code, notes, and snippets.

@12cassie34
Last active May 9, 2023 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 12cassie34/e52e5b9931e4128a610765a9000fa3fd to your computer and use it in GitHub Desktop.
Save 12cassie34/e52e5b9931e4128a610765a9000fa3fd to your computer and use it in GitHub Desktop.
Create my Own React Signal
let currentListener = undefined
const createEffect = (callback) => {
currentListener = callback
callback()
currentListener = undefined
}
// Use case
createEffect(() => {
console.log(someSignal())
})
const createSignal = (initialValue) => {
let value = initialValue
// a set of callback functions, from createEffect
const subscribers = new Set()
const read = () => {
if (currentListener !== undefined) {
// before returning, track the current listener
subscribers.add(currentListener)
}
return value
}
const write = (newValue) => {
value = newValue
// after setting the value, run any subscribers
subscribers.forEach(subscriber => subscriber())
}
return [read, write]
}
// Usecase
const [count, setCount] = createSignal(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment