Salutations mesdames et messieurs! Dans cet article, je présenterai la bibliothèque JavaScript Biscuit-store.
Description
Biscuit est un outil multifonctionnel, flexible et modulaire permettant de créer et de travailler facilement avec des conteneurs d'état gérés dans des applications JavaScript.
Les principaux objectifs de l'article
Parlez de la biscuiterie et de ses objectifs;
Comparaison avec d'autres outils similaires;
Donnez un bref aperçu de la fonctionnalité.
Ici, je ne vais pas plonger sous le capot, mais ne donnerai qu'un bref aperçu.
Avantages de la biscuiterie
Recherche de simplicité d'exécution;
-
;
;
Middleware;
;
;
;
.
core – 18Kb, Gzip: 6.2 ( CommonJs);
react – 6.8, Gzip: 2.0;
adapter – 9.6, Gzip: 3.5 ( CommonJs);
:
Internet-explorer 11+;
Chrome 48+;
Opera 25+;
Mozilla firefox 40+;
Safari 9+.
TypeScript.
?
, JavaScript state-management, : redux mobx.
Redux
, 2kB js . redux . C redux . .
, , .
,
GitHub , . , , -, . , … - , . Redux-utils , .
.
, 2015, , . 2021 JavaScript. , middleware, redux-saga redux-thunk. : .
Redux … . - -, - reselect, reducers switch – - redux-actions. .
: - .
Redux - , , , .
Mobx
mobx:
“, , . ”.
redux - , , mobx - state-management. : “ , ».
— , , , , . , , … , , .
. , .
Biscuit
biscuit-store - redux mobx. , . , .
, biscuit , .
: « ?», … - , biscuit :
;
, , , ;
, .
,
, ( ).
redux, , . , Biscuit-store .
import { createStore } from '@biscuit-store/core';
export const { store, actions } = createStore({
name: 'duck',
initial: { value: '' },
});
. . , .
, , .
import { createStore } from '@biscuit-store/core';
import { adapter } from './adapter';
export const { store, actions } = createStore({
name: 'duck',
initial: { value: '' },
actions: {
duckSwim: 'duck/swim',
duckFly: 'duck/fly',
duckQuack: 'duck/quack',
},
middleware: [adapter]
});
actions , -, , . .
import { createAdapter } from '@biscuit-store/adapter';
const { action, connect } = createAdapter();
action('duck/swim', () => {
return { value: 'duck flews' };
});
action('duck/fly', () => {
return { value: 'duck flews' };
});
action('duck/quack', (payload, state, { send }) => {
// This is an asynchronous way of transmitting the payload
send({ value: 'duck quacks' });
});
export const adapter = connect;
L'adaptateur est un module middleware qui vous permet de lier la logique à des états.
Notre canard est prêt à partir pour le grand monde.
Vérifions de quoi elle est capable.
import { actions, store } from './store/duck'
const { duckQuack } = actions;
store.subscribe((state) => {
console.log(state.value); // 'duck quacks'
})
duckQuack.dispatch();
Vous pouvez également le faire comme ceci:
import { actions } from './store/duck'
const { duckQuack } = actions;
duckQuack.dispatch().after((current) => {
console.log(current); // 'duck quacks'
});
Et voici à quoi cela ressemblera dans React .
import { observer, useDispatch } from '@biscuit-store/react';
import { actions } from './store/duck';
const { duckQuack } = actions;
export default observer(
({ value }) => {
const [setQuack] = useDispatch(duckQuack);
return (
<div className='DuckWrapper'>
<p>action: {value}</p>
<button onClick={setQuack}>Duck quacks</button>
</div>
);
},
[duckQuack]
);
Voici une petite démo .
C'est tout, merci pour votre attention!
La biscuiterie est jeune et a besoin de soutien
Biscuit est encore très jeune et en test bêta.
Si vous aimez cette bibliothèque, aidez-la à grandir sous forme d'astérisque sur GitHub '