Redux入门

Redux入门教程(快速上手)

本文尝试解释Redux是如何运作的。我们将用Redux创建一个小案列。如果你正在找靠谱的Redux文档,可以去看官方文档

什么是Redux

来自官方文档的描述:Redux是一个可预测的JavaScript状态容器。换句话说,Redux就是用来处理和管理应用的状态/数据。

如下:

Redux diagram

更多图解 点这里_

现在我们来一步一步来解答上面的图代表什么意思。

State(状态)

Redux state

任何应用都有一个状态。有些状态保存在数据库中,有些状态保存到不同的地方。在Redux中,状态存在一个单一的对象中。它知道哪个页面正打开着,它知道当前用户信息等等。状态可能是标准化,也可以是规范化的,所以当在不同的浏览器打开时,会渲染出相同的应用(同样的页面,同样的用户…)

让我们为计数应用定义我们的状态:

`var initialState = {counter: 0}`

render(渲染)

redux-render

Redux和React.js一起用效果很好,但是不用react.js也可以。我们用原生JavaScript来把状态渲染到页面:

`<div>-</div>`

function render(state) {
  document.getElementById('counter').textContent = state.counter;
}

Actions

redux-action

如果应用状态发生改变,那是因为有Actions触发了。他们可能是用户操作,也可能是异步操作,定时操作扥等等。我们将定义一个按钮来触发操作。

`&lt;button id="button"&gt;Increment&lt;/button&gt;`

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

Store 和 reducer

redux-store

Actions不会马上改变state。Redux的 store 处理这事:

var store = Redux.createStore(reducer, initialState)

function incrementCounter() {
  store.dispatch({
    type: 'INCREMENT'
  })
}

redux-reducer

store保存当前的状态,以及对actions做出反应。当一个action被触发,传入当前的state和当前的action到reducer中,reducer返回新的state,state被更新:

function reducer(state, action) {
  if (action.type === 'INCREMENT') {
    state = Object.assign({}, state, {counter: state.counter + 1})
  }
  return state
}

State 改变

当state改变,重新渲染:

store.subscribe(function() {
  render(store.getState())
})

一个React.js渲染器可以很好的处理这件事,只更新改变的部分,而不会去更新全部。

第一次渲染

如果action没有被触发就不会渲染,所以我们来触发第一次渲染:

`render(store.getState())`

最终代码

jsfiddle

// html
<div>-</div>
&lt;button id="button"&gt;Inc&lt;/button&gt;
// js
var initialState = {counter: 0}
var store = Redux.createStore(reducer, initialState)

function render(state) {
  document.getElementById('counter').textContent = state.counter;
}

document.getElementById('button').addEventListener('click', function() {
  incrementCounter()
})

function incrementCounter() {
  store.dispatch({
    type: 'INCREMENT'
  })
}

function reducer(state, action) {
  if (action.type === 'INCREMENT') {
    state = Object.assign({}, state, {counter: state.counter + 1})
  }
  return state
}

store.subscribe(function() {
  render(store.getState())
})

// 渲染初始化的 state
render(store.getState())

与MobX比较

在Redux中,你可以控制任何事:actions, action的创建,状态更新等等。意味着每个应用程序都是可以预测的。但是导致了很多重复的代码。另一方面,MobX达到相同的效果,但隐藏了一些用户触发的actions,所以你可以写更少的代码。

当然,Redux更加成熟,以及支持一些新特性,比如服务器端渲染和一些很棒的开发工具。

原文:https://bumbu.github.io/simple-redux/
本文转载自:众成翻译
译者:miaoYu
链接:http://www.zcfy.cc/article/4728
原文:https://bumbu.github.io/simple-redux

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Redux Toolkit和React Redux库来创建React应用程序中的Redux状态管理。官方推荐的方式是使用官方的Redux JS模板或Redux TS模板,它们基于Create React App并集成了Redux Toolkit和React Redux。 对于使用纯JavaScript的Redux模板,可以使用以下命令创建新的React应用程序: ``` npx create-react-app my-app --template redux ``` 对于使用TypeScript的Redux模板,可以使用以下命令创建新的React应用程序: ``` npx create-react-app my-app --template redux-typescript ``` 在Redux中,首先需要创建一个存储状态的store。整个项目只能有一个store,可以在index.js(或其他入口文件)中创建它。使用Redux的createStore函数来创建store,并将其作为属性传递给Provider组件,如下所示: ```javascript import React from 'react'; import ReactDOM from 'react-dom'; import './index.scss'; import ToDoList from './containers/ToDoList'; import { createStore } from 'redux'; import { Provider } from 'react-redux'; import reducer from './reducers/common'; const store = createStore(reducer); ReactDOM.render( <Provider store={store}> <ToDoList /> </Provider>, document.getElementById('root') ); ``` 这样,Redux的store就被创建并与React应用程序连接起来了。你可以在ToDoList组件或其他组件中使用Redux的connect函数来连接store并访问其中的状态和操作。 希望这个回答对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [React-redux使用教程](https://blog.csdn.net/xm1037782843/article/details/127606426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [React学习(三):Redux入门教程](https://blog.csdn.net/sinat_33523805/article/details/102718979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值