whatwewant / dva-socket.io

A socket.io plugin for dva
14 stars 5 forks source link

dva-socket.io

Build Status Coverage Status NPM downloads FOSSA Status

A socket.io plugin for dva dva or Redux.

Usage

// Simple Usage
import dva from 'dva';
import createSocket from 'dva-socket.io';

const app = dva();

app.use(createSocket('http://127.0.0.1:8080', null, {
  // when server push an server-message event,
  //  it will dispatch an action use server data,
  on: ['server-message'],
  emit: [
    // when you dispatch an action with type === 'send-message',
    //  it will emit a client-message event with data('client send a message')
    [
      'client-message',
      (action) => action.type === 'send-message',
      'client send a message',
    ],
  ],
}));
// Normal Usage (Recommend)
import dva from 'dva';
import createSocket from 'dva-socket.io';

const app = dva();

app.use(createSocket('http://127.0.0.1:8080', null, {
  // when server push an server-message event,
  //  it will dispatch an action use server data,
  on: {
    'server-message': (data, dispatch, getState) => dispatch(data),
  },
  emit: {
    // when you dispatch an action with type === 'send-message',
    //  it will emit a client-message event with data('client send a message')
    'client-message': {
      evaluate: (action, dispatch, getState) => action.type === 'send-message',
      data: (action) => 'client send a message',
    },
  },
}));
// With Async Service
import dva from 'dva';
import createSocket from 'dva-socket.io';

const app = dva();

app.use(createSocket('http://127.0.0.1:8080', null, {
  asyncs: [
    {
      evaluate: (action, dispatch, getState) => true,
      request: async (action, dispatch, getState) => {
        const data = await = fetch(action.payload.url);
        dispatch(data);
      },
    },
  ],
}));

Api

createSocket(url, options, rules)

License

FOSSA Status