层层传递Props

  • 单向数据流层层传递,繁琐不好管理。

Context

  • 什么是context?

context是react提供的组件通信api

  • context有什么用?

解决{组件.js}中多层级组件通信,参数层层传递的麻烦。

import React, { Component } from 'react';
import PropTypes from 'prop-types'; const Inner1 = (props) => {
return (
<div style={{ border: '2px solid green' }}>
<p>Inner1纯组件</p>
<Inner2></Inner2>
</div>
)
} const Inner2 = (props,context) => {
return (
<div style={{ border: '2px solid red' }}>
<p>Inner2纯组件</p>
<p>{context.color}</p>
</div>
)
}
Inner2.contextTypes = {
color: PropTypes.string
} class Top1 extends Component {
getChildContext() {
return { color: 'red' };
}
render() {
return (
<div>
<Inner1></Inner1>
</div>
);
}
} Top1.childContextTypes = {
color: PropTypes.string
}
export default Top1;
context 使用注意事项
  • 1-1 context 提供者(组件)中需定义getChildContext方法ruturn一个对象,对象中包含发布的信息。
  • 1-2context 提供者需定义 组件名.childContextTypes内容类型
  • 2-1访问者需定义 组件名.contextTypes内容类型
  • 2-2传参中添加context,以{context.属性}方式使用

    https://juejin.im/post/5a90e0545188257a63112977

createContext

引用官方文档:


The problem is, if a context value provided by component changes, descendants that use that value won’t update if an intermediate parent returns false from shouldComponentUpdate. This is totally out of control of the components using context, so there’s basically no way to reliably update the context.

简单说,就是如果context的值有更新时,没办法保证所有子节点一定能更新。


为什么?因为在老的Context中由上而下的“触发链”有可能被shouldComponentUpdate打断。

https://zhuanlan.zhihu.com/p/34038469

React.createContext() 此API会返回一个组件。

const Context = React.createContext();

使用这个组件中的静态Provider组件包裹子组件并发布消息。

<Context.Provider value={this.getContext()}>
<LoginFormWith />
</Context.Provider>

子组件通过静态Consumer来消费信息。

<Context.Consumer>
{(context) => (
<div>{JSON.stringiy(context)}</div>
)}
</Context.Consumer>

不过使用高阶函数来装载context更优雅

https://gitee.com/n3taway/tabs_component_packaging

react 共享数据流的更多相关文章

  1. 深入理解React(二) —— 数据流和事件原理

    版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/158 来源:腾云阁 https://www.qclou ...

  2. 【JAVASCRIPT】React学习- 数据流(组件通信)

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...

  3. React——共享state

    通常,一些组件需要反映相同的数据更改,这种情况推荐将共享state移动到它们最近的公共祖先上. 在这里有一个例子:有一个温度计算器计算在给定温度是否能让水沸腾,用户可以输入华氏温度也能输入摄氏温度,当 ...

  4. react单向数据流怎么理解?

    React是单向数据流,数据主要从父节点传递到子节点(通过props).如果顶层(父级)的某个props改变了,React会重渲染所有的子节点.

  5. react实战 系列 —— React 的数据流和生命周期

    其他章节请看: react实战 系列 数据流和生命周期 如何处理 React 中的数据,组件之间如何通信,数据在 React 中如何流动? 常用的 React 生命周期方法以及开源项目 spug 中使 ...

  6. React数据流和组件间的沟通总结

    今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...

  7. React 精要面试题讲解(一) 单向数据流

    react 单向数据流概念 'react框架是怎样的数据流向?'||'react单向数据流是怎样的概念 ?' 解答这个问题之前,我们首先得知道,js框架是个怎样的概念. 框架:具备一定**编程思想** ...

  8. React数据流和组件间的通信总结

    今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...

  9. React的单向数据流与组件间的沟通

    今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...

随机推荐

  1. urllib的使用

    1.urllib 中的urlopen urllib.urlopen(url,data) 如果请求是json格式,则data是json.dumps(data_dict)形成的数据,注意,不能在进行url ...

  2. jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧

    代码:$(document).ready(function() { jQuery("#clearCac").click(function() { jQuery.ajax({ url ...

  3. linux ln 命令,相当于windows快捷方式

    ln -s 源文件 目标文件. ln -s  **  **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间, 硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大 ...

  4. auguements实参对象的数组化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Asp.Net Cache缓存技术学习

    本文参考自Fish Li的细说 ASP.NET Cache 及其高级用法 一.前言,相信大多数做网站开发的都知道缓存技术对于网站的重要性,它对于网站的性能优化起着至关重要的作用. 关于缓存的技术大致有 ...

  6. springboot+zuul(二)------智能负载

    一.参考 参考资料:https://www.cnblogs.com/flying607/p/8330551.html ribbon+spring retry重试策略源码分析:https://blog. ...

  7. JS 开发者必须知道的十个 ES6 新特性

    这篇文章会给你简单介绍一下ES6.如果你还不知道什么是ES6的话,它是JavaScript一个新的实现,如果你是一个忙碌的JavaScript开发者(但谁不是呢),那么继续读下去吧,看看当今最热门的语 ...

  8. FocusBI:租房分析&星型模型

    微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末 ...

  9. c++删除容器中的奇数

    出自 c++ primer(4th)282页,26题 题意 数组ia[]={0,1,1,2,3,5,8,13,21,55,89};把ia复制到一个list容器中.使用单个迭代器参数版本的erase() ...

  10. QT下载地址大全

    1. 所有Qt版本下载地址: http://download.qt.io/archive/qt/ 2. 所有Qt Creator下载地址: http://download.qt.io/archive/ ...