1.1.6 • Published 6 years ago

renaox v1.1.6

Weekly downloads
6
License
MIT
Repository
-
Last release
6 years ago

Renaox

NPM version npm download

为啥会写这么一个库?

emmm...其实刚入门 react 的时候 接触的 redux,深受繁琐的毒害后就写了这么一个库,现在已经替换掉项目中的 redux,目前只支持 react16+,因为依赖了 react 新的 context Api

特点

  • 支持中间件
  • 中大型项目可多个 contro 区分模块
  • async 自带 loading
  • orm 方法自带 SCU
  • 性能好

安装

npm i -S renaox
or
yarn add renaox

例子

一个 Contro 的时候

import React from 'react';
import ReactDOM from 'react-dom';
import { Store, Provider, orm } from 'renaox';

const Count = ({ loading, count, addCount, asyncAddCount, subtractCount }) => {
  return (
    <div>
      <div>count : {loading ? 'loading...' : count}</div>
      <button disabled={loading} onClick={addCount}>
        count + 1
      </button>
      <button disabled={loading} onClick={asyncAddCount}>
        async count + 1
      </button>
      <button disabled={loading} onClick={subtractCount}>
        count - 1
      </button>
    </div>
  );
};

const mapState = state => ({
  count: state.count,
  loading: state.loading.asyncAddCount, //当使用async后自动生成的loading   loading.xxxName
});

const mapMethods = methods => ({
  addCount: () => methods.addCount(1),
  subtractCount: methods.subtractCount,
  asyncAddCount: methods.asyncAddCount,
});

const CountContainer = orm(mapState, mapMethods)(Count);

const state = {
  count: 0,
};

const methods = {
  syncs: {
    addCount(state, payload) {
      state.count = state.count + payload;
    },
    subtractCount(state, payload) {
      state.count = state.count - 1;
    },
  },
  asyncs: {
    async asyncAddCount(payload, rootState) {
      await new Promise(resolve => {
        setTimeout(resolve, 2000);
      });
      this.addCount(1);
    },
  },
};
//一个打印state改变前后的log中间件
const log = store => next => (fn, payload) => {
  console.group('改变前:', store.state);
  next(fn, payload);
  console.log('改变后:', store.state);
  console.groupEnd();
};
const store = new Store({ state, methods }, [log]);

ReactDOM.render(
  <Provider store={store}>
    <CountContainer />
  </Provider>,
  document.getElementById('root')
);

多个 Contro 的时候

当稍大的项目就需要分层 则可以使用多个 Contro

///略
const mapState = state => ({
  countA: state.controA.count,
  countB: state.controB.count,
});
///略

const controA = {
  state: { count: 0 },
};
const controB = {
  state: { count: 0 },
};

const store = new Store({ controA, controB });

开源协议

MIT

1.1.6

6 years ago

1.1.5

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago

0.2.0

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago

0.0.1-alpha.3

6 years ago

0.0.1-alpha.2

6 years ago

0.0.1-alpha.1

6 years ago