actions.js
/*
* action 类型
*/
export const ADD_TODO = 'ADD_TODO';
export const TOGGLE_TODO = 'TOGGLE_TODO'
export const SET_VISIBILITY_FILTER = 'SET_VISIBILITY_FILTER'
/*
* 其它的常量
*/
export const VisibilityFilters = {
SHOW_ALL: 'SHOW_ALL',
SHOW_COMPLETED: 'SHOW_COMPLETED',
SHOW_ACTIVE: 'SHOW_ACTIVE'
}
/*
* action 创建函数
*/
export function addTodo(text) {
return { type: ADD_TODO, text }
}
export function toggleTodo(index) {
return { type: TOGGLE_TODO, index }
}
export function setVisibilityFilter(filter) {
return { type: SET_VISIBILITY_FILTER, filter }
}
为什么export const ADD_TODO
还要export function addTodo
无法理解
import { VisibilityFilters, ADD_TODO, TOGGLE_TODO } from './actions'
...
function todoApp(state = initialState, action) {
switch (action.type) {
case SET_VISIBILITY_FILTER:
return Object.assign({}, state, {
visibilityFilter: action.filter
})
case ADD_TODO:
return Object.assign({}, state, {
todos: [
...state.todos,
{
text: action.text,
completed: false
}
]
})
default:
return state
}
}
visibilityFilter: action.filter
这句是返回visibilityFilter中的参数吗?
todos: [
...state.todos,
{
text: action.text,
completed: false
}
]
这个怎么理解?...state.todos
这个是什么意思?
{
text: action.text,
completed: false
}
这个是干嘛用的?
建议你先去了解下
es6
再来学习export const ADD_TODO
是为了后面在reducer
中可以匹配到对应到type
而export function addTodo
是暴露出这个方法,其他地方可以调用这个方法去触发这个action
Object.assign({}, state, { visibilityFilter: action.filter })
是潜拷贝了state
然后重写了visibilityFilter
这个key
的值[...state.todos]
是数组的rest
运算