美文网首页
React学习拾遗2

React学习拾遗2

作者: 夜舞暗澜_3ea2 | 来源:发表于2019-06-21 14:51 被阅读0次

组件间通信:

龟兔赛跑-React组件间通信Demo:http://js.jirengu.com/yowec/edit
React的每一帧都是重绘,所以每一次数据变动,每个组件都会先重新计算一下自己的状态。

eventHub发布订阅模式:

定义:发布/订阅模式
订阅者把自己想订阅的事件注册到调度中心,当该事件触发时候,发布者发布该事件到调度中心(顺带上下文),由调度中心统一调度订阅者注册到调度中心的处理代码。


发布/订阅模式

禁止组件直接修改数据。所有修改都应该由eventHub审核以后进行。

【初】子组件修改后发布事件的模式:

http://js.jirengu.com/jolox/50/edit?js,console,output

  1. 先看一下父组件AB的状态。父组件之间使用全局变量时,当子组件修改了全局变量后,父组件不会进行数据的更新。没有进行setState操作,数据不会被更新。
  2. 所以我们需要知道在哪里进行setState操作。简单的想法是:如果组件使用了这个数据,就需要告知一个管理员(这里是eventHub)
    “我用了这个数据,如果修改它请告诉我”。(监听事件onEventListener)
  3. 任何组件改变数据时,也要通知管理员eventHub:“我修改了这个数据,你告诉大家需要更新”。(triggerEvent)
  4. 这个模型中eventHub仅负责通知事项。


    image.png

【进】子组件提请eventHub修改数据的模式:

http://js.jirengu.com/zovaz/40/edit?js,console,output

image.png

eventHub简单代码

// ---------- EventHub ---------- //
let fnLists={};
let eventHub = {
// 触发一个事件,将发布到所有监听这个事件的组件。
  trigger(eventName, data){
    //  console.log("trigger "+eventName +". data="+data)
    let fnList = fnLists[eventName];
    if(!fnList) return false;
    for(let i=0; i<fnList.length; i++){
      fnList[i](data);
    }
  },
  //  接受到一个事件被触发,则执行下面的代码。
  on(eventName, fn){
    //     console.log("on "+eventName)
    if(!fnLists[eventName]){
      fnLists[eventName]=[]
    }
    fnLists[eventName].push(fn);
  }
}

相关文章

  • React 16 拾遗目录

    React 拾遗 React 拾遗:React 项目脚手架 如何安装 React 项目启动的前置依赖:Node.j...

  • React学习拾遗2

    组件间通信: 龟兔赛跑-React组件间通信Demo:http://js.jirengu.com/yowec/ed...

  • React学习拾遗1

    React的绘制思路 React是用于构建用户界面的 JavaScript 库。React每一帧都是通过虚拟DOM...

  • React 拾遗之 Context

    React 拾遗之 Context React.js 的 context 其实像就是组件树上某颗子树的全局变量 使...

  • react源码解析2.react的设计理念

    react源码解析2.react的设计理念 视频讲解(高效学习):进入学习[https://xiaochen102...

  • React-native 学习资料

    React-native学习心得 一.相关网站: 1.react-native中文网 2. react-nativ...

  • React 学习

    1. react 学习前的前置条件 在学习 react 之前首先需要熟悉 class 用作用和用法。 2. 学习 ...

  • 拾遗神兽目录

    拾遗神兽(番外篇)黑猫 拾遗神兽(1)水晶心的梦 拾遗神兽(2)新宠 拾遗神兽(3)初次交锋猫大爷 拾遗神兽(4)...

  • react学习(2)

    知识点 1:babel.js的作用:ES6=>ES5,jsx=>js2:小案例

  • React 拾遗:类作为组件 (2)

    如何使用代码 安装项目前置依赖,以及启动项目的方法,参看:React 拾遗:项目脚手架。 请根据文章内容,把相应部...

网友评论

      本文标题:React学习拾遗2

      本文链接:https://www.haomeiwen.com/subject/qczooqtx.html