react之Redux

回顾Vuex

核心内容

  1. store树存储所有module,state,getter,mutation,action,在index.js入口文件使用Vue.use(vuex),向根组件注入store树。
  2. mutation中可以对state进行一些简单的同步操作
  3. action中处理异步操作
  4. 只能通过dispatch(action)或者commit(mutation)来改变store树状态
  5. 提供mapGetters,mapMutations,mapStates,mapActions等辅助函数,方便各个组件混入状态
  6. 也是单向数据流

react父子组件传值

父组件传递给子组件

  // 父
  render(){
      return <Child msg={ this.state.msg }>
  }
  ...
  // 子
  render(){
      //接收
      return <p>{ this.props.msg }</p>
  }

子组件传给父组件

  // 父
      return <Child fn={ ()=>this.fn }>
  // 子
  componentDidMount(){
      // 通过调用父组件传递的函数,向其中传递子组件需要传递给父组件的参数,类似于jsonp技术,父组件相当于服务端
      this.props.fn( data )
  }

兄弟组件通信需要依赖于他们拥有的共同的父组件,父组件通过传给子组件1函数的形式获取子组件1要传给子组件2的data再在子组件2的template上通过props传给子组件2,达到兄弟同信的效果。

接触Redux

在react中的父子组件通信也类似于vue,甚至可以说一样[笑哭脸],同样当数据流十分复杂时,父子组件间的通信会非常得混乱和不直观,不宜于阅读和编写,所以才产生的redux。
  1. 同样的redux也是通过向根组件注入store来管理全局状态。
  2. 要使用Redux,首先在入口文件index.js引入至少两个东西,一个是redux中的createStore模块,还有一个自己写的reducer模块。通过createStore(reducer)来创建Store树。然后在根组件上注册。
  3. Redux默认只运行同步操作,如果有异步操作还需要使用redux提供的applyMiddleware中间件,并安装redux-thunk获取其中唯一的thunk模块,传入中间件,并将其写入createStore的第二个参数,使得此时的store树内的状态可以被异步更改了。
  4. 介绍一下reducer,自行编写的reducer导出两个东西,一个是reducer简历,reducer简历通过接受state和action两个参数,根据action.type来进行对state的更改,第二个就是许许多多的actions,可以类比于vuex中的mutation和action的结合体,action是函数,返回的对象包含了action的type和用于更改state的数据。这些actions需要通过dispatch(action())来触发。
  5. 然后,为了不在每个组件写入需要的store树,引入react-redux模块,其中的Provider在入口文件作为template包裹根结点,并传入store,从而达到注入的效果。
ReactDOM.render(
    // 提供provider函数,应用在最外层,传入store即可,所有的action也不用一个一个传进来了
    (<Provider store={store}>
        <App/>
    </Provider>),
    document.getElementById('root')
)
  1. 再然后,根组件的生成过程中引入react-redux的connect模块,connect模块接收两个函数作为参数,一个是mapStatetoProps,将store中的State属性混入props,一个是所需的actions对象的一个集合对象actionCreators。然后connect函数返回一个函数接受根组件为参数(装饰者模式),返回一个全新的App组件,从而在组件中只需简单地使用this.props.action就能触发store树的改变,通过this.props.stateName就能获取Store树的内容。
import { connect } from 'react-redux'
import { add,reduce,addSync } from './index.redux.js';

const mapStatetoProps = (state) => {
  return { num:state }
}
const actionCreators = { add,reduce,addSync }
class App extends React.component{...}
// 装饰App
App = connect(mapStatetoProps,actionCreators)(App)
// @connect(mapStatetoProps,actionCreators)和上面代码相同,但是需要引入plugins插件
export default App
  1. reducer组合,为了处理页面逻辑,一般每个页会单独写一个reducer,之后把所有的reducer整合在一起,通过redux的combineReducers函数组合所有的reducer,之后在根节点创建store时,通过改reducers创建,则每个组件都能通过this.props访问到所有的reducer中的state了。~~~
  2. 通过reducers来修改状态,dispatch(action) [或者!!!] 触发整合后的action函数返回了reducers对象,都会触发reducer。

export reducer 因为要在reducer.js中整合所有的reducer
export actions 因为在组建中要使用并触发这些action


不过还是感觉vue写得舒服0 0
代表开发者谢谢二位😏😛😜
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容