Skip to main content

Using Redux with Wechaty

NPM Version NPM Ducksify Extension

Wrap Wechaty with Redux Actions & Reducers for Easy State Management

Wechaty Redux

Image Source: Managing your React state with Redux

Downloads TypeScript

What is Redux​

Redux is a predictable state container designed to help you write JavaScript apps that behave consistently across client, server, and native environments

Why use Redux with Wechaty​

Redux is used for application state management.

  • makes the state predictable
  • easier to trace which action causes any change
  • makes it easier to test, maintain and debug

What is Ducks​

Ducksify Extension

🦆🦆🦆Ducks is a Reducer Bundles Manager that Implementing the Redux Ducks Modular Proposal with Great Convenience.

Image Credit: Alamy

Ducks Modular Proposal Re-Ducks Extended Ducksify Extension

Ducks offers a method of handling redux module packaging, installing, and running with your Redux store, with middleware support.

See Ducks is a Reducer Bundles Manager that Implements the Redux Ducks Modular Proposal with Great Convenience. It offers a method of handling redux module packaging, installing, and running with your Redux store, with middleware support.

Usage​

Install​

npm install wechaty-redux

Vanilla Redux with Wechaty Redux Plugin​

Vanilla Redux means using plain Redux without any additional libraries like Ducks.

import {
createStore,
applyMiddleware,
} from 'redux'
import {
createEpicMiddleware,
combineEpics,
} from 'redux-observable'
import { Wechaty } from 'wechaty'
import {
WechatyRedux,
Api,
} from 'wechaty-redux'

// 1. Configure Store with RxJS Epic Middleware for Wechaty Ducks API

const epicMiddleware = createEpicMiddleware()

const store = createStore(
Api.default,
applyMiddleware(epicMiddleware),
)

const rootEpic = combineEpics(...Object.values(Api.epics))
epicMiddleware.run(rootEpic)

// 2. Instanciate Wechaty and Install Redux Plugin

const bot = Wechaty.instance({ puppet: 'wechaty-puppet-mock' })
bot.use(WechatyRedux({ store }))

// 3. Using Redux Store with Wechaty Ducks API!

store.subscribe(() => console.info(store.getState()))

store.dispatch(Api.actions.ding(bot.id, 'dispatch a ding action'))

// The above code 👆 is exactly do the same thing with the following code 👇 :

Api.operations.ding(store.dispatch)(bot.id, 'call ding from operations')

Ducks Proposal Style for Wechaty Redux Plugin​

import { Wechaty }  from 'wechaty'
import { Ducks } from 'ducks'
import {
WechatyRedux,
Api,
} from 'wechaty-redux'

// 1. Ducksify Wechaty Redux API

const ducks = new Ducks({ wechaty: Api })
const store = ducks.configureStore()

// 2. Instanciate Wechaty with Redux Plugin

const bot = Wechaty.instance({ puppet: 'wechaty-puppet-mock' })
bot.use(WechatyRedux({ store }))

// 3. Using Redux Store with Wechaty Ducks API!
// (With the Power of Ducks / Ducksify)

const wechatyDuck = ducks.ducksify('wechaty')

store.subscribe(() => console.info(store.getState()))
wechatyDuck.operations.ding(bot.id, 'Ducksify Style ding!')

Ducks Api​

Ducksify Extension

Ducks is very easy to use, because one of the goals of designing it is to maximize the convenience. To know more about the Ducks Api,please refer here.