Current collected state Current
Observed since 20 Oct, 21:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
76
Lightweight wrapper of React + Router + Redux-saga for SPA development.
Lightweight (300 lines) wrapper of React + Redux + Router + saga for SPA development.
npm i -S 76
import { Application, Module } from '76';
const app = new Application('test-app');
const module = new Module('user-list', {
initialState,
selectors,
reducers,
watchers,
});
app.addModule(module);
app.setRouter(router);
app.start('#web-container', () => { console.log('app start success!'); })
How to write initialState, selectors, reducers, watchers of module?
initialStateinitialState is the initial state of module, used to initial store of redux. It is a pure object.
const initialState = {
domain: {
users: [],
},
ui: {
loading: false,
},
};
selectorsselectors is used to select the data of module state.
const selectors = {
getUserList: state => state.domain.users
};
reducersreducers is a pure function transform old state to new state.
const reducers = {
addUser: (state, user) => {
// use immutable-helper
return update(state, {
domain: {
users: {
$push: [user],
},
},
});
},
...
};
watcherswatchers is the redux action with side-effect, see document of redux-saga.
const watchers = [{
take: 'takeEvery',
actions: 'addUserAsync',
generator: function*(selectors, actions, { payload }) {
// do something with effects.
},
}];
ISC@hustcc.
npm · 1 observations shown. Missing days are unknown.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-22 | 1 | 2026-10-22T19:19:14.6926792Z |
| Package / target | Requirement | Relationship |
|---|---|---|
immutability-helper-xEnvironment{
"local_name": "immutability-helper-x",
"alias": false,
"peer_metadata": null
} | ^1.0.5 | runtime |
react-reduxEnvironment{
"local_name": "react-redux",
"alias": false,
"peer_metadata": null
} | ^5.0.6 | runtime |
reduxEnvironment{
"local_name": "redux",
"alias": false,
"peer_metadata": null
} | ^3.7.2 | runtime |
redux-sagaEnvironment{
"local_name": "redux-saga",
"alias": false,
"peer_metadata": null
} | ^0.16.0 | runtime |
babel-cliEnvironment{
"local_name": "babel-cli",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-eslintEnvironment{
"local_name": "babel-eslint",
"alias": false,
"peer_metadata": null
} | ^8.0.1 | development |
babel-jestEnvironment{
"local_name": "babel-jest",
"alias": false,
"peer_metadata": null
} | ^21.2.0 | development |
babel-plugin-transform-class-propertiesEnvironment{
"local_name": "babel-plugin-transform-class-properties",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
babel-plugin-transform-export-extensionsEnvironment{
"local_name": "babel-plugin-transform-export-extensions",
"alias": false,
"peer_metadata": null
} | ^6.22.0 | development |
babel-preset-envEnvironment{
"local_name": "babel-preset-env",
"alias": false,
"peer_metadata": null
} | ^1.6.1 | development |
babel-preset-reactEnvironment{
"local_name": "babel-preset-react",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
coverallsEnvironment{
"local_name": "coveralls",
"alias": false,
"peer_metadata": null
} | ^3.0.0 | development |
cross-envEnvironment{
"local_name": "cross-env",
"alias": false,
"peer_metadata": null
} | ^5.1.0 | development |
enzymeEnvironment{
"local_name": "enzyme",
"alias": false,
"peer_metadata": null
} | ^3.1.0 | development |
eslintEnvironment{
"local_name": "eslint",
"alias": false,
"peer_metadata": null
} | ^4.9.0 | development |
eslint-config-airbnbEnvironment{
"local_name": "eslint-config-airbnb",
"alias": false,
"peer_metadata": null
} | ^16.1.0 | development |
eslint-config-airbnb-baseEnvironment{
"local_name": "eslint-config-airbnb-base",
"alias": false,
"peer_metadata": null
} | ^12.1.0 | development |
eslint-plugin-importEnvironment{
"local_name": "eslint-plugin-import",
"alias": false,
"peer_metadata": null
} | ^2.8.0 | development |
eslint-plugin-jsx-a11yEnvironment{
"local_name": "eslint-plugin-jsx-a11y",
"alias": false,
"peer_metadata": null
} | ^6.0.2 | development |
eslint-plugin-reactEnvironment{
"local_name": "eslint-plugin-react",
"alias": false,
"peer_metadata": null
} | ^7.4.0 | development |
jestEnvironment{
"local_name": "jest",
"alias": false,
"peer_metadata": null
} | ^21.2.1 | development |
jsdomEnvironment{
"local_name": "jsdom",
"alias": false,
"peer_metadata": null
} | ^11.3.0 | development |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": null
} | ^16.0.0 | development |
react-domEnvironment{
"local_name": "react-dom",
"alias": false,
"peer_metadata": null
} | ^16.0.0 | development |
rimrafEnvironment{
"local_name": "rimraf",
"alias": false,
"peer_metadata": null
} | ^2.6.2 | development |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": null
} | >=0.13.2 || ^0.14 || ^15.0.0 || >=16.0.0-alpha.1 <17.0.0 | peer |
Source distribution
{
"integrity": "sha512-Tljh0LIvW1rGy/oc+apsp7sjrjTkY0jczro0ZRza8zK8i0PpFp9zDC7sVTImmObDBrvHqRCtFqxShYkaSqZYBw==",
"shasum": "8d0325af40ef9f688a4400adc9084970692f4a9d",
"tarball": "https://registry.npmjs.org/76/-/76-0.0.3.tgz",
"signatures": [
{
"keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
"sig": "MEUCIQCnLzUrT8EtHKBuz8sCC9LZxkhNFO1vRswgxyq+o7p/iQIgJmuiM7IYjAyVf+lyGzswmM7iOp5QeyCdkw6JYaTuKaI="
}
]
}Observed since 20 Oct, 21:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:7e73d508e1f532bc19a69c1edaea161cdd0442777e376432dbf719b0adf7d7a2