Appearance
4-Three Principles三大原则
本节目标:理解“4-Three Principles三大原则”的核心思路,并能把它用于实际开发或面试表达。
Redux可以用三个fundamental基本 原则来描述:
一、真实的单一来源Single source of truth 整个应用程序的状态存储在单个存储中的object tree对象树中。 这使得创建universal通用应用程序变得很容易,因为您的服务器的状态可以被序列化并hydrated水合到客户机中,而不需要额外的编码工作。单个状态树还使调试或检查应用程序变得更容易;它还允许您在开发过程中持久化应用程序的状态,从而加快开发周期。一些传统上很难实现的功能——例如撤销/重做——如果您的所有状态都存储在一个树中,那么实现起来可能会突然变得很简单。
console.log(store.getState())
/* Prints{ visibilityFilter: 'SHOW_ALL', todos: [ { text: 'Consider using Redux', completed: true, }, { text: 'Keep all state in a single tree', completed: false } ]}*/二、State is read-only 改变state状态的唯一emit方法是发出一个
action动作,一个描述发生了什么的对象。 这确保views视图和network callbacks网络回调都不会直接写入状态。相反,它们表达了转换状态的意图。因为所有的更改都是集中的,并且按照严格的顺序一个接一个地发生,所以没有需要注意的细微竞争条件。由于操作只是普通对象,因此可以对其进行日志记录、序列化、存储,并在稍后重播,以进行调试或测试。
store.dispatch({ type: 'COMPLETE_TODO', index: 1})
store.dispatch({ type: 'SET_VISIBILITY_FILTER', filter: 'SHOW_COMPLETED'})三、使用pure functions纯函数进行更改
Changes are made with
reducer函数是纯粹的函数,它接受前一个状态和一个动作,然后返回下一个状态。记住要返回新的状态对象,而不是改变以前的状态。您可以从单个reducer程序开始,随着应用程序的增长,将其拆分为更小的reducer程序,以管理状态树的特定部分。因为reducer只是函数,所以可以控制调用它们的顺序、传递额外的数据,甚至为分页等常见任务创建可重用的reducer。
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'const reducer = combineReducers({ visibilityFilter, todos })const store = createStore(reducer)
That's it! Now you know what Redux is all about.> 来自
<https://redux.js.org/introduction/three-principles>