0.0.14 • Published 4 months ago

redext v0.0.14

Weekly downloads
19
License
-
Repository
github
Last release
4 months ago

redext

A simple global store based on React Context and Hooks

Installation

npm install redext
or
yarn add redext

Use It

// store/models/common.js
import React from 'react';

export default {
  state: {
     theme: 'white',
     showModal: false
  },
  effects: (dispatch) => {
     return {
       onOpenModal(modalState) {
         this.updateState({
           showModal: true,
           modalState
         });
         
         // or
         dispatch({
           type: 'common/updateState',
           payload: {
             showModal: true,
             modalState
           }
         });
         
         // or
         dispatch.common.updateState({
           showModal: true,
           modalState
         })
       }
     }
  },
  reducers: {
      updateState: (state, payload) => {
        return {
          ...state,
          ...payload
        };
      },
      changeTheme: (state) => {
        return {
          ...state,
          theme: state.theme === 'white' ? 'dark' : 'white'
        };
      }
  }
}
// store/models/index.js
import common from './common';
import auth from './auth';

export default {
  common,
  auth
}
// store/index.js
import { Provider, connect, init, models } from 'redext';

import models from './models';

export { Provider, connect, init, models }
// client/index.js
import { Provider, init, models } from './store';

const store = init({
  models
});

const App = ({ children, initialValue = {} }) => {
  return (
    <Provider store={store} initialValue={initialValue}>
       {children}
    </Provider>
  )
}

export default App
// client/pages/movie.js
import { connect, memoize, useDeepEffect } from 'redext';

const Movie = ({ dispatch, theme, onOpenModal }) => {
  useDeepEffect(() => {
  }, [array, object]);
  
  return (
    <div>
      {theme}
    </div>
  )
}

const mapState = ({ common: { theme } }) => ({
  theme
});

const mapDispatch = ({ common: { onOpenModal } }) => ({
  onOpenModal
});

// options
const memoPropsAreEqual = (prevProps, nextProps) => {
  if (nextProps.visible !== prevProps.visible) {
    return false
  }

  return true
};

export default connect(mapState, mapDispatch)(memoize(Movie, memoPropsAreEqual))
0.0.13-staging

4 months ago

0.0.13

4 months ago

0.0.14

4 months ago

0.0.13-staging-1

4 months ago

0.0.13-staging-2

4 months ago

0.0.10

1 year ago

0.0.11

1 year ago

0.0.12

1 year ago

0.0.7-1

2 years ago

0.0.9

2 years ago

0.0.8-4

2 years ago

0.0.8-3

2 years ago

0.0.8

2 years ago

0.0.8-2

2 years ago

0.0.8-1

2 years ago

0.0.7-2

2 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.4-3.staging

3 years ago

0.0.4-8.staging

3 years ago

0.0.4-2.staging

3 years ago

0.0.4-4.staging

3 years ago

0.0.4-staging

3 years ago

0.0.4-5.staging

3 years ago

0.0.4-6.staging

3 years ago

0.0.4-7.staging

3 years ago

0.0.4-1.staging

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago