6.9.2 • Published 4 years ago

@redux-model/web v6.9.2

Weekly downloads
218
License
MIT
Repository
github
Last release
4 years ago

Redux Model is created to enhance original redux framework, which has complex development flow and lots of template fragments.

License Travis (.com) Coveralls github

npm.io npm.io npm.io npm.io

Features

  • Less code and higher efficiency
  • Modify reducer by MVVM
  • Absolutely 100% static type checking with typescript
  • Trace loading status for each request action
  • Support react hooks

Installation

Web

npm install @redux-model/web react-redux

React-Native

npm install @redux-model/react-native react-redux

Vue

npm install @redux-model/vue

Taro

npm install @redux-model/taro @tarojs/redux

Define Model

interface Response {
  id: number;
  name: string;
}

interface Data {
  counter: number;
  users: Partial<{
    [key: string]: Response;
  }>;
}

class TestModel extends Model<Data> {
    increase = this.action((state) => {
        state.counter += 1;
    });

    getUser = $api.action((id: number) => {
        return this
            .get<Response>(`/api/user/${id}`)
            .onSuccess((state, action) => {
                state.counter += 1;
                state.users[id] = action.response;
            });
    });

    protected initReducer(): Data {
        return {
            counter: 0,
            users: {},
        };
    }
}

export const testModel = new TestModel();

With React Hooks

import React, { FC } from 'react';

const App: FC = () => {
    const counter = testModel.useData((data) => data.counter);
    const loading = testModel.getUser.useLoading();

    const increase = () => {
        testModel.increase();
        testModel.getUser(3);
    };

    return (
        <button onClick={increase}>
            {loading ? 'Waiting...' : `You clicked ${counter} times`}
        </button>
    );
};

export default App;

With Redux connect

import React, { Component } from 'react';
import { connect } from 'react-redux';

type Props = ReturnType<typeof mapStateToProps>;

class App extends Component<Props> {
    increase() {
        testModel.increase();
        testModel.getUser(3);
    }

    render() {
        const { loading, counter } = this.props;
        return (
            <button onClick={this.increase}>
                {loading ? 'Waiting...' : `You clicked ${counter} times`}
            </button>
        );
    }
}

const mapStateToProps = () => {
    return {
        counter: testModel.data.counter,
        loading: testModel.getUser.loading,
    };
};

export default connect(mapStateToProps)(App);

With Vue

<template>
  <button @click="increase">
    {{loading ? 'Waiting...' : `You clicked ${counter} times`}}
  </button>
</template>

<script>
export default {
  name: 'HelloWorld',
  methods: {
    increase() {
      testModel.increase();
      testModel.getUser(3);
    },
  },
  computed: {
    counter() {
      return testModel.data.counter;
    },
    loading() {
        return testModel.getUser.loading;
    },
  },
};
</script>

Demos

Documents

Here is the document


Feel free to use it and welcome to send PR to me.

6.9.2

4 years ago

6.9.1

4 years ago

6.9.0

4 years ago

6.9.0-rc.1

4 years ago

6.9.0-rc.0

4 years ago

6.8.3

4 years ago

6.8.2

4 years ago

6.8.1

4 years ago

6.8.0

4 years ago

6.8.0-beta.9

4 years ago

6.8.0-beta.8

4 years ago

6.8.0-beta.7

4 years ago

6.8.0-beta.6

4 years ago

6.8.0-beta.5

4 years ago

6.8.0-beta.4

4 years ago

6.8.0-beta.3

4 years ago

6.8.0-beta.2

4 years ago

6.8.0-beta.0

4 years ago

6.8.0-beta.1

4 years ago

6.7.6

4 years ago

6.7.6-beta.0

4 years ago

6.7.5

4 years ago

6.7.4

4 years ago

6.7.4-beta.0

4 years ago

6.7.3

4 years ago

6.7.3-beta.0

4 years ago

6.7.2

4 years ago

6.7.1

4 years ago

6.7.1-beta.0

4 years ago

6.7.1-beta.1

4 years ago

6.7.0

4 years ago

6.7.0-beta.5

4 years ago

6.7.0-beta.4

4 years ago

6.7.0-beta.3

4 years ago

6.7.0-beta.2

4 years ago

6.7.0-beta.1

4 years ago

6.7.0-beta.0

4 years ago

6.6.1-beta.1

4 years ago

6.6.1-beta.0

4 years ago

6.6.0

4 years ago

6.6.0-beta.0

4 years ago

6.5.11

4 years ago

6.5.11-beta.0

4 years ago

6.5.10

4 years ago

6.5.10-beta.2

4 years ago

6.5.10-beta.1

4 years ago

6.5.10-beta.0

4 years ago

6.5.8

4 years ago

6.5.7

4 years ago

6.5.6

4 years ago

6.5.5

4 years ago

6.5.4

4 years ago

6.5.3

4 years ago

6.5.3-beta.1

4 years ago

6.5.3-beta.0

4 years ago

6.5.2

4 years ago

6.5.1

4 years ago

6.5.0

4 years ago

6.5.0-beta.7

4 years ago

6.5.0-beta.6

4 years ago

6.5.0-beta.5

4 years ago

6.5.0-beta.4

4 years ago

6.5.0-beta.3

4 years ago

6.5.0-beta.2

4 years ago

6.5.0-beta.1

4 years ago

6.5.0-beta.0

4 years ago

6.4.4

4 years ago

6.4.3

4 years ago

6.4.2

4 years ago

6.4.1

4 years ago

6.4.0-beta.1

4 years ago

6.4.0-beta.0

4 years ago

6.4.0

4 years ago

6.3.0

4 years ago

6.3.0-beta.3

4 years ago

6.3.0-beta.2

4 years ago

6.3.0-beta.1

4 years ago

6.3.0-beta.0

4 years ago

6.2.0

4 years ago

6.2.0-beta.1

4 years ago

6.2.0-beta.0

4 years ago

6.1.3

5 years ago

6.1.2

5 years ago

6.1.1

5 years ago

6.1.0

5 years ago

6.0.2

5 years ago

6.0.1

5 years ago

6.0.0

5 years ago

6.0.0-beta.3

5 years ago

6.0.0-beta.2

5 years ago

6.0.0-beta.1

5 years ago

6.0.0-beta.0

5 years ago

5.12.0

5 years ago

5.11.0

5 years ago

5.10.7

5 years ago

5.10.6

5 years ago

5.10.5

5 years ago

5.10.5-rc.5

5 years ago

5.10.5-rc.4

5 years ago

5.10.5-rc.3

5 years ago

5.10.5-rc.2

5 years ago

5.10.5-rc.1

5 years ago

5.10.5-rc.0

5 years ago

5.10.4

5 years ago

5.10.3

5 years ago

5.10.2

5 years ago

5.10.2-rc.1

5 years ago

5.10.2-rc.0

5 years ago

5.10.1

5 years ago

5.10.0

5 years ago

5.10.0-rc.2

5 years ago

5.10.0-rc.1

5 years ago

5.10.0-rc.0

5 years ago

5.9.0

5 years ago

5.9.0-rc.5

5 years ago

5.9.0-rc.4

5 years ago

5.9.0-rc.3

5 years ago

5.9.0-rc.2

5 years ago

5.9.0-rc.1

5 years ago

5.9.0-rc.0

5 years ago

5.8.0

5 years ago

5.8.0-rc.7

5 years ago

5.8.0-rc.6

5 years ago

5.8.0-rc.5

5 years ago

5.8.0-rc.4

5 years ago

5.8.0-rc.3

5 years ago

5.8.0-rc.2

5 years ago

5.8.0-rc.1

5 years ago

5.8.0-rc.0

5 years ago

5.7.0

5 years ago

5.7.0-rc.14

5 years ago

5.7.0-rc.13

5 years ago

5.7.0-rc.12

5 years ago

5.7.0-rc.11

5 years ago

5.7.0-rc.10

5 years ago

5.7.0-rc.9

5 years ago

5.7.0-rc.8

5 years ago

5.7.0-rc.7

5 years ago

5.7.0-rc.6

5 years ago

5.7.0-rc.5

5 years ago

5.7.0-rc.4

5 years ago

5.7.0-rc.3

5 years ago

5.7.0-rc.2

5 years ago

5.7.0-rc.1

5 years ago

5.7.0-rc.0

5 years ago

6.0.0-beat.3

5 years ago

6.0.0-beat.2

5 years ago

6.0.0-beat.1

5 years ago

6.0.0-beat.0

5 years ago

5.6.0

5 years ago

5.6.0-rc.3

5 years ago

5.6.0-rc.2

5 years ago

5.6.0-rc.1

5 years ago

5.6.0-rc.0

5 years ago

5.5.1

5 years ago

5.5.1-rc.0

5 years ago

5.5.0

5 years ago

5.4.6

5 years ago

5.5.0-rc.0

5 years ago

5.4.5

5 years ago

5.4.4

5 years ago

5.4.3

5 years ago

5.4.2

5 years ago

5.4.1

5 years ago

5.4.0

5 years ago

5.3.1

5 years ago

5.3.0

5 years ago

5.2.2

5 years ago

5.2.1-rc.1

5 years ago

5.2.1

5 years ago

5.2.0

5 years ago

5.2.0-rc.3

5 years ago

5.2.0-rc.2

5 years ago

5.2.0-rc.1

5 years ago

5.2.0-rc.0

5 years ago

5.1.1

5 years ago

5.1.0

5 years ago

5.0.0

5 years ago

4.3.2-rc.10

5 years ago

4.3.2-rc.9

5 years ago

4.3.2-rc.8

5 years ago

4.3.2-rc.7

5 years ago

4.3.2-rc.6

5 years ago

4.3.2-rc.5

5 years ago

4.3.2-rc.4

5 years ago

4.3.2-rc.3

5 years ago

4.3.2-rc.2

5 years ago

4.3.2-rc.1

5 years ago

4.3.2-rc.0

5 years ago

4.3.1

5 years ago

4.3.0

5 years ago

4.2.8

5 years ago

4.2.7

5 years ago

4.2.6

5 years ago

4.2.5

5 years ago

4.2.4

5 years ago

4.2.3

5 years ago

4.2.3-rc.0

5 years ago

4.2.2

5 years ago

4.2.1

5 years ago

4.2.0

5 years ago

4.1.3

5 years ago

4.1.2

5 years ago

4.1.1

5 years ago

4.1.0

5 years ago

4.0.2

5 years ago

4.0.0

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago