React 教程第十一篇 —— Redux 简介和简单实现
Redux
前端框架的组件式开发永远有一道鸿沟——跨组件通信。我在 Vue 教程中有提到过,如果对跨组件通信不明白的可先跳过去看看。
React 不同与双向数据绑定框架,它是单向数据流,所以每次更新都得调用setState
,所以在跨组件通信中会比较迂回。还有就是 React 没有逻辑分层,在开发过程中,逻辑分层是很重要的。
Redux 实现了跨组件通信和逻辑分层的好处,所以在 React 中使用 Redux 更配。
Redux 简单实现
为了说明问题,先来一个公共对象实现跨组件通信。当然这个也是 flux 的实现原理。
actions.js
export default { increment(){ return { type: "+" } }, decrement(){ return { type: '-' } } }
reducer
export default (state = 0, action) => { switch(action.type){ case '+': return state + 1; case '-': return state - 1; default: return state; } }
component
import React, {Component} from 'react' import {createStore} from 'redux' import Actions from './actions' import Reducer from './reducer' const store = createStore(Reducer); export default class Component1 extends Component{ constructor(props){ super(props); this.state = {count: 0} } increment = () => { store.dispatch(Actions.increment()); this.setState({ count: store.getState() }) } render(){ return ( <div> <h3>component-cp1-{this.state.count}</h3> <input type="button" value="increment" onClick={this.increment}/> </div> ) } }
小结——分层
Actions 层
- 用户行为操作,由用户在 View 层触发
store.dispatch(Actions.increment());
- 行为操作应该为一个
function
且必须返回有type
属性的对象 - 每个方法都应该由
store
进行派发。
- 用户行为操作,由用户在 View 层触发
Reducer 层
- 必须是一个纯函数(一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用)
- 接受两个参数,第一个为
state
,另一个为action
return
的结果可以用store.getState()
来接收
Store 层
redux
的一个方法,接受reducer
,返回一个对象store
- 对象
store
的方法dispath
用于派发action
- 通过
dispath
派发的action
会触发reducer
View 层
- 视图层,也就是组件
- 通过
getState()
获取的值然后再setState
便可以显示。
相关推荐
opendigg 2020-06-02
weiqi 2020-04-29
mjzhang 2020-04-16
游走的豚鼠君 2020-11-10
81417707 2020-10-30
ctg 2020-10-14
小飞侠V 2020-09-25
PncLogon 2020-09-24
jipengx 2020-09-10
颤抖吧腿子 2020-09-04
wwzaqw 2020-09-04
maple00 2020-09-02
青蓝 2020-08-26
罗忠浩 2020-08-16
liduote 2020-08-13
不知道该写啥QAQ 2020-08-02
pengruiyu 2020-08-01
wmd看海 2020-07-27