Simple Redux

时间:2019-06-12
本文章向大家介绍Simple Redux,主要包括Simple Redux使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

This is a post that tries to explain the the basics of Redux. We’ll build a minimal working example with Redux. If you’re looking for proper Redux documentation then check official docs.

What is Redux

From the official docs - Redux is a predictable state container for JavaScript. In other words Redux is meant to handle and organize application state/data.

Here is a diagram that often is confusing when you see it first time:

more diagrams here

So let’s go step by step and see what that diagram means.

State

Any application has a state. Some store their state in a database, some store their state in multiple places. In Redux you store the state in a single object. It knows which page is curently open, a set of items, current user and so on. It may be normalized or denormalized, but it should know enough so that you can save the state (say as JSON) and when loaded in a different browser - it will render the same app (same page, same items, same user…).

Let’s define our state for a counter app:

var initialState = {counter: 0}

Js

Rendering

Redux works very well with React.js, but it can be rendered with anything else. We’ll render the state using plain JS:

<div id="counter">-</div>

HTML

function render(state) {

  document.getElementById('counter').textContent = state.counter;

}

Js

Actions

If application state changes, that’s because of actions. They could be user actions, asynchronous actions, scheduled actions and so on. We’ll define a button that will trigger an action.

<button id="button">Increment</button>

HTML

document.getElementById('button').addEventListener('click', incrementCounter)

Js

Store and reducer

Actions don’t change the state directly. A Redux store is responsible for that:

var store = Redux.createStore(reducer, initialState)

function incrementCounter() {

  store.dispatch({

    type: 'INCREMENT'

  })

}

Js

The Redux store holds the current state, and reacts to actions. When an action is dispatched (line 4), the store updates the state by passing current state and current action to the reducer, and the state is updated with what the reducer returned:

function reducer(state, action) {

  if (action.type === 'INCREMENT') {

    state = Object.assign({}, state, {counter: state.counter + 1})

  }

  return state

}

Js

State change

When state changes, renderer updates the render:

store.subscribe(function() {

  render(store.getState())

})

Js

A React.js renderer is perfect in that case as it updates only what changed (and not everything as we just did).

First render

As the render will not happen until an action will be dispatched, let’s trigger the very first render straight away:

render(store.getState())

Js

https://bumbu.me/simple-mobx/

原文地址:https://www.cnblogs.com/feng9exe/p/11011471.html