Skip to content

fk the action types that produce a large amount of constant variables, used with redux

License

Notifications You must be signed in to change notification settings

IAIAE/fk-action-type

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

this

这个是一个为了不写冗余的action和reducer而做的Redux的封装。使用方法如下:

首先创建一个Data的实例,构造方法包括两个参数,namedefaultStatename唯一标识一个Data对象,全局是不能重复的。defaultState和redux中的一个意思,指默认store的值。

下面我们以创建一个只有name属性的store为例子,我们有一个setName方法可以更改name属性的值。

如果是传统的redux,我们会怎么写?肯定像下面这样,首先创建一个action:

let nameAction = (newName) => ({
    type: 'setName',
    data: newName
})

然后在另一个js文件中创建一个reducer:

let nameReducer = (state, action) => {
    return Object.assign({}, state, {
        name: action.data
    })
}

很麻烦不是?为什么不能写到一起呢?

let store = new Data('nameStore', {
    name: 'default name'
}).listen('setName', {
    action: name => (newName) => ({
        type: name,
        data: newName
    }),
    reducer: name => ({
        [name]: (state, action) => {
            return Object.assign({}, state, {
                name: action.data
            })
        }
    })
})

如果action纯粹是为了透传,那么action字段也可以省略。

let store = new Data('nameStore', {
    name: 'default name'
}).listen('setName', {
    reducer: name => ({
        [name]: (state, action) => {
            return Object.assign({}, state, {
                name: action.data
            })
        }
    })
})

自己封装一下会更加简洁:

let store = new Data('nameStore', {
    name: 'default name'
}).listen('setName', {
    reducer: simpleReducer((state, action) => ({
        name: action.data
    })) 
})

如何触发一个action呢?

store.dispatch('setName', 'foo');

About

fk the action types that produce a large amount of constant variables, used with redux

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published