MCPcopy Index your code
hub / github.com/Aslemammad/contextism

github.com/Aslemammad/contextism @v1.3.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.3.2 ↗ · + Follow
11 symbols 25 edges 9 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Contextism 🤩 is a new way to use React Context better.

picker

Read this article to become familiar with the idea.

Downloads Size License

Installation 🔥

npm i contextism
// or 
yarn add contextism

Usage ✏️

We have two ways to use Contextism, Creating store using it or using its hooks directly:

#1 createStore ✋

// store.js 
import { createStore } from 'contextism';
const context = createStore("default value for state");
export const { Provider, useDispatchContext, useStateContext, useStore } = context;

// App.jsx
import Div from './Div'
import { Provider } from './store';

const App = () => {
    const [ state, dispatch ] = React.useState("Value for state"); // or useReducer

    return (
        <Provider state={state} dispatch={dispatch}>
            // Components you want to use the state there.



        </Provider>
        )
}

// Div.jsx
import { useStateContext, useDispatchContext, useStore } from './store';

const Div = () => {
    const state = useStateContext(); // "Value for state"
    const dispatch = useDispatchContext(); // dispatch function (setState) in App
    // or better one
    const [state, dispatch] = useStore();

    return ...
}

When we create store using Contextism, it gives us 3 hooks :

  • useStateContext: the state value that we gave it to state prop in Provider component
  • useDispatchContext: the setState function or useReducer dispatch that we passed it to dispatch prop
  • useStore: returns us an array with two values of the above hooks; [ useStateContext, useDispatchContext ]

NOTE: you should use these hooks( methods of createStore function) in child components of Provider component.

#2 default hooks ✋

Contextism has two hooks beside createStore function:

  • useContext: takes a React context and returns the value
  • useStore: takes two React contexts and returns two values of them, the same thing like in the above way but with two arguments
// Store.jsx
export const CountStateContext = React.createContext();
export const CountDispatchContext = React.createContext();
function countReducer(state, action) {
  ...
}

export function CountProvider({children}) {
  const [state, dispatch] = React.useReducer(countReducer, {count: 0});
  return (
    <CountStateContext.Provider value={state}>
      <CountDispatchContext.Provider value={dispatch}>
        {children}
      </CountDispatchContext.Provider>
    </CountStateContext.Provider>
  )
}
// App.jsx
import { CountProvider } from './Store';
import Div from './Div';
export function App() {
    return (
        <CountProvider>



        </CountProvider>
    )

}
// Div.jsx
import { CountStateContext, CountDispatchContext } from './Store';
import { useContext, useStore} from 'contextism';

export function Div() {
    const state = useContext(CountStateContext);
    const dispatch = useContext(CountDispatchContext);
    // Or much better:
    const [state, dispatch] = useStore(CountStateContext,CountDispatchContext);

    return ...

}

Typescript 🔷

Contextism has Typescript support like generics and ... . in createStore you can pass two generics too, first one for the state structure and interface, the second one for the useReducer hook.

type Action = {type: 'increment'} | {type: 'decrement'}
type State = { count: number }
// The second generic is for useReducer Action
const context = createStore<State, Action>();

// For useState just pass the first generic (State interface generic)
const context = createStore<State>();

Contribution

I'm developer, not a perfect person, so I make much mistakes, it means that be free to create issues and then PRs.

Thanks ❤️

Special thanks for contributing and using this project.

Extension points exported contracts — how you extend this code

Player (Interface)
(no doc)
example/index.tsx
Store (Interface)
(no doc)
example/index.tsx

Core symbols most depended-on inside this repo

createStore
called by 3
src/createStore.tsx
useContext
called by 2
src/hooks.ts
useStore
called by 2
src/hooks.ts
Div
called by 0
example/index.tsx
countReducer
called by 0
example/index.tsx
App
called by 0
example/index.tsx
useContext
called by 0
src/index.tsx

Shape

Function 9
Interface 2

Languages

TypeScript100%

Modules by API surface

example/index.tsx5 symbols
src/hooks.ts2 symbols
src/__tests__/createStore.test.tsx2 symbols
src/index.tsx1 symbols
src/createStore.tsx1 symbols

For agents

$ claude mcp add contextism \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact