Skip to content

3-Core Concepts概念 ​

本节目标:理解“3-Core Concepts概念”的核心思路,并能把它用于实际开发或面试表达。 假设应用程序的状态被描述为一个普通对象。 那么一个todo应用程序的状态可能是这样的:

{  todos: [{    text: 'Eat food',    completed: true  }, {    text: 'Exercise',    completed: false  }],  visibilityFilter: 'SHOW_COMPLETED'}

这个对象类似于“模型”,只是没有setter。这样其他代码就不能arbitrarily随意更改状态,从而导致难以复制的bug。 要更改状态中的某些内容,您需要dispatch调度一个操作。action是一个描述发生了什么的plain普通的JavaScript对象(注意我们是如何不引入任何魔法的?)下面是一些例子:


{ type: 'ADD_TODO', text: 'Go to swimming pool' }{ type: 'TOGGLE_TODO', index: 1 }{ type: 'SET_VISIBILITY_FILTER', filter: 'SHOW_ALL' }

强制将每一个变化都描述为一个动作,这样我们就能清楚地了解应用程序中发生了什么。如果某件事发生了变化,我们就知道它为什么会发生变化。行动就像已经发生的事情的面包屑。最后,为了将状态和动作联系在一起,我们编写了一个名为reducer的函数。同样,这也没什么神奇的——它只是一个以状态和动作为参数的函数,并返回应用程序的下一个状态。为一个大的应用程序编写这样的函数很困难,因此我们编写较小的函数来管理状态的各个部分:

function visibilityFilter(state = 'SHOW_ALL', action) {  if (action.type === 'SET_VISIBILITY_FILTER') {    return action.filter  } else {    return state  }}
function todos(state = [], action) {  switch (action.type) {    case 'ADD_TODO':      return state.concat([{ text: action.text, completed: false }])    case 'TOGGLE_TODO':      return state.map(        (todo, index) =>          action.index === index            ? { text: todo.text, completed: !todo.completed }            : todo      )    default:      return state  }}

我们编写另一个reducer来管理我们app的完整状态,通过调用这两个reducer来获取对应的状态键:

:
function todoApp(state = {}, action) {  return {    todos: todos(state.todos, action),    visibilityFilter: visibilityFilter(state.visibilityFilter, action)  }}

这就是Redux的基本思想。注意,我们没有使用任何Redux api。它有一些utilities公用程序facilitate促进该模式,但主要的思想是,您将描述您的状态如何随时间进行更新,并响应到操作对象,和编写的90%代码只是纯JavaScript,没有使用redux,它的api,或者任何魔法。

> 来自

 <https://redux.js.org/introduction/core-concepts>

本站总访问 — 次