Socket
Socket
Sign inDemoInstall

better-context

Package Overview
Dependencies
3
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    better-context

Tiny React context wrapper for using contexts without the hassle


Version published
Weekly downloads
11
Maintainers
1
Install size
10.1 kB
Created
Weekly downloads
 

Readme

Source

Better Context

Tiny React context wrapper for using contexts without the hassle

Installation

npm i better-context

or with yarn:

yarn add better-context

Usage

Create a context

const useCoolContext = betterContext()(({ state, provided }) => {
  const counter = useState(0);

  return {
    foo: "bar",
    counter: state(counter), // using the state wrapper is optional
    output: "foo bar " + provided, // "foo bar baz"
  };
});

Provide it at highest common ancestor

function App() {
  return (
    <useCoolContext.Provider provide="baz">
      <Component />
    </useCoolContext.Provider>
  );
}

Consume the context

function Component() {
  const { counter } = useCoolContext();

  // counter.value   (get)          ✅
  // counter.value = 123            ✅
  // counter.value++                ✅
  // counter.set(prev => prev + 1)  ✅

  return (
    <>
      <button onClick={() => counter.value--}>-</button>
      {counter.value}
      <button onClick={() => counter.value++}>+</button>
    </>
  );
}

It's that simple!

TypeScript

The reason for using currying to instantiate the better context is because TypeScript as of now does not support partial type argument inference. Thus, to circumvent this issue currying is utilized to allow the context return value to be inferred while the provided value can be given or left unused:

type Provided = {
  foo: string;
  bar: number;
};

const useTsContext = betterContext<Provided>()(({ provided }) => {
  const counter = useState(0);

  return `${provided.foo}: ${provided.bar}`;
});
/* ... */
<useTsContext.Provider
  provide={{
    foo: "baz",
    bar: 1337,
  }}
>
  ...
</useTsContext.Provider>;

Keywords

FAQs

Last updated on 04 Dec 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc