Controller data
Name | Type | Description | Default value | Required |
---|---|---|---|---|
prefix | string | Prefix should be unique for each controller. | 'c-state' | Optional |
actions | Object<{[string], string}> or Array<string> | List of action types which will be generated. | - | Required |
initial | object | Initial data for your redux state. | - | Required |
subscriber | function | Root watcher saga of controller. | - | Required |
Example action.
- TypeScript
- JavaScript
import { takeEvery } from 'redux-saga/effects';
import { Controller, ActionCreators, ActionCreator, create } from 'redux-saga-controller';
// You should add interface for actions its only one way to define payload annotation
interface IActions extends ActionCreators<IInitial> {
initialize: ActionCreator<InitializePayload>;
someAction: ActionCreator<SomePayload>;
getSelf: ActionCreator<GetSelfPayload>;
}
export const controller:Controller<IActions, IInitial> = create({
prefix: 'defaultPrefix',
actions: ['initialize', 'getSelf'],
initial: {
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
subscriber: function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
});
import { takeEvery } from 'redux-saga/effects';
import createController, { Controller, ActionCreators, ActionCreator } from 'redux-saga-controller';
// You should add interface for actions its only one way to define payload annotation
interface IActions extends ActionCreators<IInitial> {
initialize: ActionCreator<InitializePayload>;
someAction: ActionCreator<SomePayload>;
getSelf: ActionCreator<GetSelfPayload>;
}
export const controller:Controller<IActions, IInitial> = createController(
{
initialize: 'init',
getSelf: 'getSelf',
someAction: 'someAction',
},
function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
{
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
'defaultPrefix' // controller prefix
);
import { create } from 'redux-saga-controller';
import { takeEvery } from 'redux-saga/effects';
export const controller = create({
prefix: 'defaultPrefix',
actions: ['initialize', 'getSelf'],
initial: {
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
subscriber: function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
});
import { takeEvery } from 'redux-saga/effects';
import createController from 'redux-saga-controller';
export const controller = createController(
// NOTE Types for which action creators will be generated
{
initialize: 'init',
getSelf: 'getSelf',
someAction: 'someAction',
},
// NOTE root subscriber of controller
function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
// NOTE Initial data for your redux state
{
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
// NOTE Prefix should be unique for each controller
'defaultPrefix'
);