3.0.0-alpha.4 ā€¢ Published 1 year ago

@redux-eggs/react v3.0.0-alpha.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Redux Eggs for React

This package provides higher-order component (HOC) and function to create an injector component that allows you to add parts of Redux store before the component is mounted, and remove them after the component is unmounted.

Contents:

Installation:

If you are using Yarn, run

yarn add @redux-eggs/core @redux-eggs/react

If you are using NPM, run

npm install --save @redux-eggs/core @redux-eggs/react

āš ļø Minimum supported versions of peer dependencies:

  • react 16.8.3 and newer
  • react-redux 7.0.0 and newer

Usage

Usage with withEggs HOC (recommended šŸ‘)

import { useSelector } from 'react-redux'

const getMyEgg = () => {
  return {
    id: 'my-egg',
    reducersMap: {
      myState: myReducer,
      // ...
    },
    // ...
  }
}

const selector = state => state.myState.value

export const MyComponent = withEggs([getMyEgg()])(function MyComponent() {
  const value = useSelector(selector)

  return <div>{value}</div>
})

Usage with getInjector

Create your eggs:

// my-egg.js
export const getMyEgg = () => {
  return {
    id: 'my-egg',
    reducersMap: {
      myState: myReducer,
      // ...
    },
    // ...
  }
}

// my-another-egg.js
export const getMyAnotherEgg = () => {
  return {
    id: 'my-another-egg',
    reducersMap: {
      myAnotherState: myAnotherReducer,
      // ...
    },
    // ...
  }
}

Configure your React Component(s):

// my-component.js
import { useSelector } from 'react-redux'

export const MyComponent = () => {
  const value = useSelector(state => state.myState.value)

  return <div>{value}</div>
}

// my-another-component.js
import { useSelector } from 'react-redux'

export const MyAnotherComponent = () => {
  const anotherValue = useSelector(state => state.myAnotherState.value)

  return <div>{anotherValue}</div>
}

Create Injector and wrap your React Component(s).

// app.js
import { getInjector } from '@redux-eggs/react'
import { Provider } from 'react-redux'

import { store } from './store'
import { getMyEgg } from './eggs/my-egg'
import { getMyAnotherEgg } from './eggs/my-another-egg'
import { MyComponent } from './components/my-component'
import { MyAnotherComponent } from './components/my-another-component'

const Injector = getInjector([getMyEgg(), getMyAnotherEgg()])

const App = () => {
  return (
    <Provider store={store}>
      <Injector.Wrapper>
        <MyComponent />
        <MyAnotherComponent />
      </Injector.Wrapper>
    </Provider>
  )
}

You shouldn't use destructuring assignment with result of getInjector.

Bad:

import { getInjector } from '@redux-eggs/react'

const { Wrapper } = getInjector([
  /* array of `eggs` */
])

const Component = () => {
  return (
    <Wrapper>
      <AnotherComponent />
    </Wrapper>
  )
}

Good:

import { getInjector } from '@redux-eggs/react'

const Injector = getInjector([
  /* array of `eggs` */
])

const App = () => {
  return (
    <Injector.Wrapper>
      <AnotherComponent />
    </Injector.Wrapper>
  )
}
3.0.0-alpha.3

1 year ago

3.0.0-alpha.4

1 year ago

2.2.0

2 years ago

2.1.0

2 years ago

2.0.0

2 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago