3.1.0 • Published 4 years ago
@fleur/fleur v3.1.0
🌼 @fleur/fleur 🌼 
 
 
An Fully-typed Flux framework inspired by Fluxible. Runs on Node / Web.
(No dependence to React. see this if you want to use with React.)
Feature
- Fully typed. Friendly to type inference.
 - Comfortable to write code
 - Default async operations (side effector) support
 - immer.js builtin Store
 - Support Redux DevTools
 
Example
// actions.ts (Action typings)
import { actions, action } from '@fleur/fleur'
export const CounterActions = actions('Counter', {
    increase: action<{ amount: number }>(),
    decrease: action<{ amount: number }>(),
}// store.ts (Store)
import { reducerStore } from '@fleur/fleur'
import { CounterActions } from './actions.ts'
interface State {
  count: number
}
export const CounterStore = reducerStore<State>('CounterStore', () => ({
  count: 0
}))
  .listen(CounterActions.increase, (draft, payload) => {
    // immutable changing state with `immer.js`
    draft.count += payload.amount
  })
  .listen(CounterActions.decrease, (draft, payload) => {
    draft.count -= payload.amount
  })
}// operations.ts (Action Creator)
import { operations } from '@fleur/fleur'
import { CounterActions } from './actions.ts'
export const CounterOps = operations({
  increase(ctx, amount: number) {
    ctx.dispatch(CounterActions.increase, { amount })
  },
  decrease(ctx, amount: number) {
    ctx.dispatch(CounterActions.decrease, { amount })
  },
})// selectors.ts
import { selector } from '@fleur/fleur'
import { CounterStore } from './store.ts'
export const selectCount = selector(getState => getState(CounterStore).count)// app.ts
import Fleur, { withReduxDevTools } from '@fleur/fleur'
import { CounterStore } from './store.ts'
import { CounterOps } from './operations.ts'
import { selectCount } from './selectors.ts'
const app = new Fleur({
  stores: [CounterStore],
})
;(async () => {
  const ctx = app.createContext()
  // Enable redux-devtools if you want
  withReduxDevTools(ctx)
  await ctx.executeOperation(CounterOps.increase, 10)
  console.log(selectCount(ctx.getStore)) // => 10
  await ctx.executeOperation(CounterOps.decrease, 20)
  console.log(selectCount(ctx.getStore)) // => -10
})()How to use with React?
See @fleur/react.
3.1.0-beta.9
4 years ago
3.1.0-beta.3
4 years ago
3.1.0-beta.5
4 years ago
3.1.0-beta.6
4 years ago
3.1.0-beta.7
4 years ago
3.1.0-beta.8
4 years ago
3.1.0
4 years ago
3.1.0-beta.1
4 years ago
3.1.0-beta.2
4 years ago
3.0.1
4 years ago
3.0.0-beta.3
5 years ago
3.0.0
5 years ago
3.0.0-beta.4
5 years ago
3.0.0-beta.2
5 years ago
3.0.0-beta.1
5 years ago
2.1.0-beta.1
5 years ago
2.0.0
5 years ago
1.6.0
5 years ago
1.5.0
5 years ago
1.4.1
6 years ago
1.4.0
6 years ago
1.3.0
6 years ago
1.2.3
6 years ago
1.2.2
6 years ago
1.2.1
6 years ago
1.2.0
6 years ago
1.1.2
6 years ago
1.1.1
6 years ago
1.1.0
6 years ago
1.0.0
6 years ago