@action-land/component 中文文档教程
@action-land/component
基于Action 的功能组件
Installation
npm i @action-land/component
Usage
import {Nil} from '@action-land/core'
import {COM} from '@action-land/component'
// component is created using the COM constructor function
const component = COM(
() => ({count: 0}),
(a, s) => ({...s, count: count + 1}),
() => Nil(),
(s: Smitten, m: {count: 0}, p: {color: string}) => 'Hello World' + m.count
)
// component can be transformed using map()
const crazyComponent = component.map(component =>
COM(
(...t) => Object.assign({crazy: true}, component.init(...t)),
component.update,
component.command,
component.view
)
)
API
Component
一个组件由 4 个纯函数组成 —
init
: Creates the initial state of the component.update
: Is a reducer function.command
: Is a command function.view
: Takes in the state and other params and returns a virtual dom element.- Components are framework agnostic.
export interface Component<State, Params, Args extends any[], VNode> {
init(...t: Args): State
update<T>(action: Action<T>, state: State): State
command<T, R>(action: Action<T>, state: State): Action<R>
view(e: Hoe, m: State, p: Params): VNode
map<S, P, A, V>(
t: Component<State, Params, Args, VNode>
): Component<S, P, A, V>
}
init()
- Can take in any number of arguments.
- Returns the initial version of the
State
.
function init(...t: any[]): State
update()
- Its an [update function] that takes in an Action and a
State
and returns a newState
.
function update(action: Action, state: State): State
command()
- Its an command function that takes in an Action and a
State
and returns a new Action.
function command(action: Action, state: State): Action
view()
- Takes in three arguments —
Hoe
,State
andParams
. - Returns a new virtual dom element —
VNode
. VNode
can be anything implementation from [React], [snabbdom] etc.
function view(e: Hoe, s: State, p: Params): VNode
@action-land/component
Action based functional components
Installation
npm i @action-land/component
Usage
import {Nil} from '@action-land/core'
import {COM} from '@action-land/component'
// component is created using the COM constructor function
const component = COM(
() => ({count: 0}),
(a, s) => ({...s, count: count + 1}),
() => Nil(),
(s: Smitten, m: {count: 0}, p: {color: string}) => 'Hello World' + m.count
)
// component can be transformed using map()
const crazyComponent = component.map(component =>
COM(
(...t) => Object.assign({crazy: true}, component.init(...t)),
component.update,
component.command,
component.view
)
)
API
Component
A component is set of 4 pure functions —
init
: Creates the initial state of the component.update
: Is a reducer function.command
: Is a command function.view
: Takes in the state and other params and returns a virtual dom element.- Components are framework agnostic.
export interface Component<State, Params, Args extends any[], VNode> {
init(...t: Args): State
update<T>(action: Action<T>, state: State): State
command<T, R>(action: Action<T>, state: State): Action<R>
view(e: Hoe, m: State, p: Params): VNode
map<S, P, A, V>(
t: Component<State, Params, Args, VNode>
): Component<S, P, A, V>
}
init()
- Can take in any number of arguments.
- Returns the initial version of the
State
.
function init(...t: any[]): State
update()
- Its an [update function] that takes in an Action and a
State
and returns a newState
.
function update(action: Action, state: State): State
command()
- Its an command function that takes in an Action and a
State
and returns a new Action.
function command(action: Action, state: State): Action
view()
- Takes in three arguments —
Hoe
,State
andParams
. - Returns a new virtual dom element —
VNode
. VNode
can be anything implementation from [React], [snabbdom] etc.
function view(e: Hoe, s: State, p: Params): VNode