2.8.1 • Published 5 years ago

reactdux v2.8.1

Weekly downloads
6
License
MIT
Repository
github
Last release
5 years ago

Reactdux

Helpful functions for React applications.

App

import { app } from 'reactdux';
import Component from './component';

const state = {
  name: 'Joe',
  age: 25,
  friends: [
    { name: 'Pete', age: 26 },
    { name: 'Sam', age: 27 },
  ],
};

export default app(Component, state);

Actions

import { action } from 'reactdux';
import { fetcFriends } from './api';

export const addFriend = action((state, name, age) => ({
  friends: [
    ...state.friends,
    { name, age },
  ],
}));

export const getFriends = action(async state => {
  state({ loading: true });
  const friends = await fetchFriends();
  state({
    loading: false,
    friends,
  });
});

Selectors

import { selector } from 'reactdux';

const selectFriend = selector((state, id) =>
  state.friends.find(friend => friend.id === id));

const selectOlderFriends = selector(
  state => state.age,
  state => state.friends,
  (age, friends) => friends
    .filter(friend => friend.age >= age),
);

Containers

import { container } from 'reactdux';
import { withFriends } from './hocs';
import { selectFriends } from './selectors';

export default container(
  withFriends,
  {
    friends: selectFriends,
  },
  props => ({
    retired: props.age >= 65,
  }),
  Component,
);

Components

import React from 'react';
import { component } from 'reactdux';
import { addFriend } from './actions';

export default component({
  props: {
    age: 1,
    friends: [],
    retired: false,
  },
  state: {
    breaths: 0,
  },
  mount() {
    this.timer = setInterval(this.onBreathe, 1000);
  },
  unmount() {
    clearInterval(this.timer);
  },
  onBreathe() {
    this.setState({ breaths: this.state.breaths + 1 });
  },
  render() {
    return (
      <div>
        <p>breaths: {this.state.breaths}</p>
        <p>friends: {this.props.friends.length}</p>
        <button onClick={this.setState('breaths', 0)}>Reset</button>
        <button onClick={() => addFriend('Hank', 21)}>Befriend</button>
      </div>
    );
  },
});

Context

import { context } from 'reactdux';

const Person = context(
  {
    name: 'Paul',
    age: 28,
    friends: [],
  },
  (state, setState) => ({
    changeName: () => setState({ name: 'Bob' }),
    getOlder: (years = 1) => setState({ age: state.age + years }),
    makeFriends: async () => {
      const friends = fetchFriends();
      setState({ friends });
    },
  }),
);

export default () => (
  <Person.Provider>
    <div>
      <Person.Consumer>
        {({ name, age, getOlder }) => (
          <div>
            <div>{name} is {age} years old.</div>
            <button onClick={getOlder}>Age</button>
          </div>
        )}
      </Person.Consumer>
    </div>
  </Person.Provider>
);
2.8.1

5 years ago

2.8.0

5 years ago

2.7.0

5 years ago

2.6.0

5 years ago

2.5.0

5 years ago

2.4.2

5 years ago

2.4.1

5 years ago

2.4.0

5 years ago

2.3.0

5 years ago

2.2.4

5 years ago

2.2.3

5 years ago

2.2.2

5 years ago

2.2.1

5 years ago

2.2.0

5 years ago

2.1.0

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.30.0

5 years ago

1.29.0

5 years ago

1.28.0

5 years ago

1.27.0

5 years ago

1.26.2

5 years ago

1.26.1

5 years ago

1.26.0

5 years ago

1.25.0

5 years ago

1.24.0

5 years ago

1.23.0

5 years ago

1.22.0

5 years ago

1.21.1

5 years ago

1.21.0

5 years ago

1.20.0

5 years ago

1.19.0

5 years ago

1.18.0

5 years ago

1.17.0

5 years ago

1.16.0

5 years ago

1.15.0

5 years ago

1.14.0

5 years ago

1.13.1

5 years ago

1.13.0

5 years ago

1.12.0

5 years ago

1.11.0

5 years ago

1.10.0

5 years ago

1.9.0

5 years ago

1.8.0

5 years ago

1.7.1

5 years ago

1.7.0

5 years ago

1.6.0

5 years ago

1.5.0

5 years ago

1.4.1

5 years ago

1.4.0

5 years ago

1.3.0

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago

0.34.0

5 years ago

0.33.0

5 years ago

0.32.1

5 years ago

0.32.0

5 years ago

0.31.0

5 years ago

0.30.2

5 years ago

0.30.1

5 years ago

0.30.0

5 years ago

0.29.2

6 years ago

0.29.1

6 years ago

0.28.2

6 years ago

0.28.1

6 years ago

0.28.0

6 years ago

0.27.1

6 years ago

0.26.0

6 years ago

0.25.0

6 years ago

0.24.0

6 years ago

0.23.0

6 years ago

0.21.0

6 years ago

0.20.0

6 years ago

0.19.1

6 years ago

0.19.0

6 years ago

0.18.0

6 years ago

0.17.0

6 years ago

0.16.1

6 years ago

0.16.0

6 years ago

0.15.0

6 years ago

0.14.0

6 years ago

0.13.0

6 years ago

0.12.2

6 years ago

0.12.1

6 years ago

0.12.0

6 years ago

0.11.1

6 years ago

0.11.0

6 years ago

0.10.6

6 years ago

0.10.5

6 years ago

0.10.4

6 years ago

0.10.3

6 years ago

0.10.2

6 years ago

0.10.1

6 years ago

0.10.0

6 years ago

0.9.0

6 years ago

0.8.1

6 years ago

0.8.0

6 years ago

0.7.1

6 years ago

0.7.0

6 years ago

0.6.0

6 years ago

0.5.0

6 years ago

0.4.0

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.0

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago