1.0.3 • Published 5 years ago

react-mgmt v1.0.3

Weekly downloads
2
License
ISC
Repository
github
Last release
5 years ago

💊 react-mgmt

version 1.0.1

A state management trip for React.

Getting Started

Install w/ Yarn:

$ yarn add react-mgmt

or if you prefer npm:

$ npm i react-mgmt

Example

in App.js, import the MgmtProvider and pass it your application's initial state and (root) reducer:

import React from 'react'
import { MgmtProvider } from 'react-mgmt'
import rootReducer from './reducers'
import initialState from './initialState'

const App = () => {
  return (
    <MgmtProvider reducer={rootReducer} initialState={initialState}>
      // your app here
    </MgmtProvider>
  )
}

Call the useMgmt hook from anywhere in your component tree to access your state obj and dispatch function:

import React from 'react'
import { useMgmt } from 'react-mgmt'

const ToggleThemeButton = () => {
  const [{ theme }, dispatch] = useMgmt()
  return <button onClick={() => dispatch('TOGGLE_THEME')}>{theme}</button>
}

API

MgmtProvider (Component)

const ExampleApp = () => {
  return (
    <MgmtProvider reducer={rootReducer} initialState={initialState}>
      // your app here
    </MgmtProvider>
  )
}

Wrap your top-level component with MgmtProvider like you would with Context.Provider.

PropDescription
reducerRoot reducer function.
initialStateInitial state object of your application.

useMgmt (Hook)

const ExampleButton = () => {
  const [{ theme }, dispatch] = useMgmt()
  return <button onClick={() => dispatch('TOGGLE_THEME')}>{theme}</button>
}

Call this hook from anywhere in the component tree to access (and subscribe to) state and/or dispatch.

Return ValueDescription
[state, dispatch]Deconstruct the state object if you don't wish to pull in top-level state every time.

MgmtConsumer (Component)

I didn't forget about class components! You can use MgmtConsumer inside your class component to access state and dispatch without using Hooks:

class ExampleButton extends React.Component {
  render() {
    return (
      <MgmtConsumer>
        {([state, dispatch]) => (
          <button onClick={() => dispatch('EXAMPLE_ACTION')}>
            {state.exampleValue}
          </button>
        )}
      </MgmtConsumer>
    )
  }
}

Credits

This package is my spin on a Medium article by Luke Hall (@lukashala).

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago