码迷,mamicode.com
首页 > 其他好文 > 详细

初入redux -01

时间:2018-02-05 18:35:20      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:输入   sig   pat   lan   efault   javascrip   --   combiner   数据   

createStore用来生成Store,fn形式为(state, action) => state的纯函数,返回新的state而不是修改的

import { createStore } from ‘redux‘;
const store = createStore(fn);

Store对象包含所有数据,state就是Store在某个时刻的数据快照,当前时刻的state可以用store.getState()获取

import { createStore } from ‘redux‘;
const store = createStore(fn);

const state = store.getState()

 

改变内部 state 的唯一方法是 dispatch 一个 action(store.dispatch()),action只是一个用来描述已发生事件的对象

// action 可以被序列化,用日记记录和储存下来,后期还可以以回放的方式执行
store.dispatch({ type: ‘INCREMENT‘ });
// 1
store.dispatch({ type: ‘INCREMENT‘ });
// 2
store.dispatch({ type: ‘DECREMENT‘ });
// 1
store.dispatch({ type: ‘ADD_TODO‘, payload: ‘Learn Redux‘ });
 

引用官方原话-- 为了描述action如何改变state tree 需要编者reducers,Reducer只是一些纯函数(固定输入=>固定输出) 随着应用变大,可以把reducers拆成多个小reducers,分别独立操作state tree的不同部分

function visibilityFilter(state = ‘SHOW_ALL‘, action) {
  switch (action.type) {
    case ‘SET_VISIBILITY_FILTER‘:
      return action.filter
    default:
      return state
  }
}

function todos(state = [], action) {
  switch (action.type) {
    case ‘ADD_TODO‘:
      return [
        ...state,
        {
          text: action.text,
          completed: false
        }
      ]
    case ‘COMPLETE_TODO‘:
      return state.map((todo, index) => {
        if (index === action.index) {
          return Object.assign({}, todo, {
            completed: true
          })
        }
        return todo
      })
    default:
      return state
  }
}

import { combineReducers, createStore } from ‘redux‘
let reducer = combineReducers({ visibilityFilter, todos })
let store = createStore(reducer)

 

初入redux -01

标签:输入   sig   pat   lan   efault   javascrip   --   combiner   数据   

原文地址:https://www.cnblogs.com/SharkChilli/p/8418309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!