当前位置: 首页 > news >正文

react 父子传值_react 父子组件传值——父传子

有兴趣的小伙伴可以加Q群 879108483 互相学习

1.使用props传值

具体实现

import React, { Component } from 'react';

/**父组件 */

export default class Parent extends Component {

state = {

msg: 1

}

render() {

return (

this.setState({ msg: this.state.msg + 1 })} >

{/* 子组件 */}

);

}

}

/**子组件 */

class Child extends Component {

// 默认的props 可写可不写

static defaultProps = {

msg: 1

}

render() {

return (

{/* 通过props传递过来的参数 */}

{this.props.msg}

)

}

}

2.使用context (上下文)

Context被归类为高级部分(Advanced),属于React的高级API,但官方并不建议在稳定版的App中使用Context。实际上很多优秀的组件都是通过context来实现的,比如antd的主题样式。用好context可以使项目更灵活。

Context 不仅仅适用于父传子,还可以用来作为跨级传递数据,比如父组件传孙子组件。如果要使用props达到这个效果就要层层传递props。 下面看看context实现方式

简单使用 (老方法)

import React, { Component } from 'react';

import PropTypes from 'prop-types';

/**父组件 */

export default class Parent extends Component {

state = {

msg: 0

}

// 声明Context属性

static childContextTypes = {

// 数字类型

msg: PropTypes.number,

// 方法

method: PropTypes.func

}

// 返回Context对象,约定好方法

getChildContext() {

return {

msg: this.state.msg,

method: () => "返回来的信息"

}

}

render() {

return (

this.setState({ msg: this.state.msg + 1 })} >

{/* 子组件 */}

{/* 无状态子组件 */}

);

}

}

/**子组件 */

class Child extends Component {

// 声明需要使用的Context属性 必写 不然听过this.context.xxx 取出来的值为undefind

static contextTypes = {

msg: PropTypes.number

}

render() {

return (

{/* 通过props传递过来的参数 */}

{this.context.msg}

{/* 孙子组件 */}

)

}

}

/**无状态组件 */

const ChildStateLess = (props, context) => {

return (

{context.msg}

)

}

/**为无状态组件声明需要使用的Context属性 */

ChildStateLess.contextTypes = {

msg: PropTypes.number

}

/**孙子组件 */

class GrandsonComponent extends Component {

// 声明需要使用的Context属性 必写 不然听过this.context.xxx 取出来的值为undefind

static contextTypes = {

msg: PropTypes.number

}

render() {

return (

{/* 通过props传递过来的参数 */}

{this.context.msg}

)

}

}

使用 Api创建

import React from 'react';

const ExampleContext = React.createContext({

msg: 0,

method: () => "method"

});

此ExampleContext通过React.createContext创建,这个Context对象包含两个组件,和。

两个API代替了getChildContext、childContextTypes、contextTypes这些繁琐的api,更符合react的设计理念。

import React, { Component } from 'react';

import PropTypes from 'prop-types';

const ExampleContext = React.createContext('ExampleContext');

class ExampleProvider extends Component {

state = {

msg: 0

}

render() {

return (

{

this.setState({ msg: this.state.msg + 1 })

}} >

{ } }} >

);

}

}

/**子组件 */

class Child extends Component {

render() {

return (

{

(context) => (

{/* 通过props传递过来的参数 */}

{context.msg}

{/* 孙子组件 */}

)

}

)

}

}

/**无状态组件 */

const ChildStateLess = (props, context) => {

return (

{

(context) => (

{/* 通过props传递过来的参数 */}

{context.msg}

{/* 孙子组件 */}

)

}

)

}

/**为无状态组件声明需要使用的Context属性 */

ChildStateLess.contextTypes = {

msg: PropTypes.number

}

/**孙子组件 */

class GrandsonComponent extends Component {

render() {

return (

{

(context) => (

{/* 通过props传递过来的参数 */}

{context.msg}

{/* 孙子组件 */}

)

}

)

}

}

export default ExampleProvider;

直接使用context的地方

生命周期:

1.componentWillReceiveProps(nextProps, nextContext)

2.shouldComponentUpdate(nextProps, nextState, nextContext)

3.componetWillUpdate(nextProps, nextState, nextContext)

构造函数: constructor(props, context)

web前端、react交流群:879108483

相关文章:

  • python和mysql匹配吗_Python最佳实践和最安全的方法来连接MySQL和执行查询
  • java openresty 调用_OpenResty 究竟解决了什么痛点?
  • plsq如何快捷整理代码_plsql常用快捷键
  • php strpose_PHP之strpos
  • win10装debian 双系统_技术|如何拥有一个 Windows 10 和 Debian 10 的双系统
  • redistemplate怎么修改数据_redisTemplate一opsForValue操作
  • linux命令deploy_Linux deploy 超详细入门教程
  • word文档怎么到下一页去写_word文档怎么把下一页的内容移到上一页?
  • 绞车拆装实训报告_千斤顶实训报告.doc
  • incrby redis 最大值_Redis Incrby 命令
  • 包装函数 python_Python 在函数上添加包装器
  • kirin710f是什么处理器_麒麟710F处理器怎么样
  • epoll编程实例客户端_socket采用epoll编程demo
  • pythonsvd内存不足_python – 有没有办法防止numpy.linalg.svd内存不足?
  • python 统计分析apache日志_Apache 日志分析(一)
  • 78. Subsets
  • Docker: 容器互访的三种方式
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript实现分页效果
  • Java-详解HashMap
  • Laravel 实践之路: 数据库迁移与数据填充
  • PhantomJS 安装
  • TypeScript迭代器
  • Vue.js 移动端适配之 vw 解决方案
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 技术发展面试
  • 简析gRPC client 连接管理
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 异步
  • ​configparser --- 配置文件解析器​
  • ​渐进式Web应用PWA的未来
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #NOIP 2014#Day.2 T3 解方程
  • $jQuery 重写Alert样式方法
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (实战篇)如何缓存数据
  • (算法)Travel Information Center
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ***检测工具之RKHunter AIDE
  • .Net IE10 _doPostBack 未定义
  • .Net MVC + EF搭建学生管理系统
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net6 Api Swagger配置
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @html.ActionLink的几种参数格式
  • @RequestBody详解:用于获取请求体中的Json格式参数