Skip to main content
Home
It is unknown whether this package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
It is unknown whether this package works with Cloudflare Workers
It is unknown whether this package works with Node.js
It is unknown whether this package works with Deno
It is unknown whether this package works with Bun
It is unknown whether this package works with Browsers
JSR Score
52%
Published
2 years ago (1.1.2)

marcs-observable

bronifty@gmail.com

Description

This package is a typescript replica of @1marc's observablish-values package used on the frontend masters website for the media player.

Usage

Install Package

pnpm add @bronifty/marcs-observable

Code Example

import React from "react";
import MarcsObservable from "@bronifty/marcs-observable";

// declaring our observable state outside the component to maintain state across re-renders; this could also be done in a store and imported
const [
  childObservableGetter,
  childObservableSetter,
  childObservableSubscriber,
] = MarcsObservable.useState(0);
const [parentObservableGetter] = MarcsObservable.useState(
  () => childObservableGetter() * 2
);
let unsubscribe = () => {};

const App = () => {
  // subscribing react hook for ui update to observable value update inside a useEffect so it runs once on mount and doesn't get re-assigned every re-render
  const [input1, setInput1] = React.useState(childObservableGetter());
  React.useEffect(() => {
    unsubscribe = childObservableSubscriber((newVal: any) => {
      setInput1(newVal);
    });
    return () => {
      unsubscribe();
    };
  }, []); // Empty dependency array ensures this effect runs only once on mount

  const handleInputChange = (e: any) => {
    childObservableSetter(e.target.value); // Update observable state
  };

  return (
    <>
      <section>
        <h2>numeric input</h2>
        <input type="number" value={input1} onChange={handleInputChange} />
        <p>
          childObservableGetter value (childObservableGetter()):{" "}
          {childObservableGetter()}
        </p>
        <p>
          parentObservableGetter value (parentObservableGetter()):{" "}
          {parentObservableGetter()}
        </p>
        <button onClick={unsubscribe}>unsubscribe from ui updates</button>
      </section>
    </>
  );
};

export default App;

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";
or

Import directly with a jsr specifier

import * as marcs_observable from "jsr:@bronifty/marcs-observable";

Add Package

pnpm i jsr:@bronifty/marcs-observable
or (using pnpm 10.8 or older)
pnpm dlx jsr add @bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";

Add Package

yarn add jsr:@bronifty/marcs-observable
or (using Yarn 4.8 or older)
yarn dlx jsr add @bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";

Add Package

vlt install jsr:@bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";

Add Package

npx jsr add @bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";

Add Package

bunx jsr add @bronifty/marcs-observable

Import symbol

import * as marcs_observable from "@bronifty/marcs-observable";