React组件通信

1、props接收数据

//index.js
import App from "./App";ReactDOM.render(<App name='传递数据' age={19}color={[1,2,3]}fn={()=>{console.log('函数')}}tag={<p>段落</p>}/>,document.getElementById("root")
);

第一种方式:函数组件props通过参数接收

//app.js
function App(props) {function myClick(e) {console.log(props);}return (<div className="App"><button onClick={myClick}>按钮</button></div>);
}
export default App;

第二种方式:类组件通过this.props.直接访问

class App extends React.Component {render() {return (<div><span>props: {this.props.name}</span></div>);}
}
export default App;

特点:

  1. 可以给组件传递任意类型的数据
  2. props是只读的对象,只能读取属性的值,无法修改对象
  3. 使用类组件时,如果写了构造函数,应该将props传递给super(),否则,无法在构造函数中获取props
class Hello extends React.Component {constructor(props){super(props)console.log(props)}render(return(<div></div>))
}

2、父传子

使用props:

//父组件
import Children from "./Children";class App extends React.Component {state = {data: "父组件state数据",};render() {return (<div><span>props: {this.props.age}</span><div style={{ color: "red", border: "1px solid #f00" }}>子组件:<Children data={this.state.data} /></div></div>);}
}
export default App;
//子组件
import React from "react";class Children extends React.Component {render() {return (<div><h3> childrens </h3><p>数据:{this.props.data}</p></div>);}
}export default Children;

3、子传父

利用回调函数,父组件提供回调,子组件调用

//父组件
import Children from "./Children";
class App extends React.Component {state = {data: "父组件state数据",data2: "",};getChildData = (val) => {console.log("val", val);this.setState({data2: val,});};render() {return (<div><span>props: {this.props.age}</span><div style={{ color: "red", border: "1px solid #f00" }}>子组件:<Children data={this.state.data} getChildData={this.getChildData} />子组件数据:{this.state.data2}</div></div>);}
}export default App;
//子组件
class Children extends React.Component {sendData = () => {this.props.getChildData("子组件传递数据");};render() {return (<div><h3> childrens </h3><p onClick={this.sendData}>数据:{this.props.data}</p></div>);}
}export default Children;

4、兄弟组件传值

用父级做中间件,子传父,父再传子

//children1
import React from "react";class Children extends React.Component {sendData = () => {this.props.getChildData("子组件传递数据");};render() {return (<div><h3> childrens </h3><p onClick={this.sendData}>点击children1</p>数据:{this.props.data}</div>);}
}export default Children;
//Children2
import React from "react";
class Children2 extends React.Component {render() {return (<div>显示兄弟children组件的数据:{this.props.data}</div>);}
}export default Children2;
//App 父组件
import Children from "./Children";
import Children2 from "./Children2";
class App extends React.Component {state = {data: "父组件state数据",data2: "",};getChildData = (val) => {console.log("val", val);this.setState({data2: val,});};render() {return (<div><span>props: {this.props.age}</span><div style={{ color: "red", border: "1px solid #f00" }}>子组件:<Children data={this.state.data} getChildData={this.getChildData} />父组件显示子组件数据:{this.state.data2}子组件2:<Children2 data={this.state.data2} /></div></div>);}
}export default App;

其实都是用了props

5.children属性

  • children属性:表示组件标签的子节点,当组件标签有子节点时,props就会有该属性。
  • 与props属性一样,值可以是任意值(文本、dom、甚至函数)
function Hello(props) {return {<div>组件是子节点:{props.children}</div>}
}<Hello> 我是子节点 </Hello>

6.props深入

  1. 安装prop-type(npm i prop-types)
  2. 导入prop-type包
  3. 使用 组件名.propType = {} 来给组件的props添加校验规则
import PropTypes from 'prop-types'
function App(props){return {<h1>Hi, {props.colors}</h1>}
}
App.proptypes = {//约束colors属性为arrray类型colors: Proptypes.array//类型有: array、bool、func、number、object、string、element
}
  1. 必填:(.isRequired)
requireFunc: PropTypes.func.isRequired
  1. 指定特定结构的对象:(shape({ }))
oprionalObjectWithShape: PropType.shape({color: PropType.string,fontSize: PropsTypes.number
})

React组件通信--props相关推荐

  1. React组件通信-非父子组件间的通信

    文章目录 React非父子组件通信 小知识点的补充 Context应用场景 Context相关API Context使用流程 React非父子组件通信 在React中, 非父子组件传递是通过一个API ...

  2. React组件通信(父传子,子传父) - 前端

    父组件向子组件传值(通过props传值) 子组件: class Children extends Component{constructor(props){super(props);}render() ...

  3. react组件通信-逆战1913

    父组件向子组件通信 父组件: import React,{ Component } from "react"; import Childre from"./Childre ...

  4. Vue3+Typescript学习笔记(十)组件通信--父子组件通信(props,$emit),非父子组件通信(provide和inject,mitt库)

    一.认识组件的嵌套 1. App单独开发 前面我们是将所有的逻辑放到一个App.vue中: 在之前的案例中,我们只是创建了一个组件App: 如果我们一个应用程序将所有的逻辑都放在一个组件中,那么这个组 ...

  5. React组件通信技巧

    效果图 communication.gif 点击查看Github完整源码 1.父向子通信 直接标签中插入参数即可 //number只是个例子 let _number = this.state.numb ...

  6. React组件通信传值 父传子 子传父 兄弟组件传值

    一.父组件传递子组件 在父组件中引入子组件,将父组件的state值放到子组件标签中传递,在子组件中用this.props.传值名称,接收 父组件代码: import React, { Componen ...

  7. (26)Vue.js组件通信—props 命名规则

    建议 prop 命名使用 camelCase(驼峰命名法),父组件绑定时使用 kebab-case(多个单词使用连字符连接书写).

  8. React中组件通信的几种方式

    首次发表在个人博客 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1. 父组件向子组件通信 React数据流动是单向的,父组件向子组件 ...

  9. react 显示隐藏组件的方法_10种React组件之间通信的方法

    来源 | https://segmentfault.com/a/1190000023585646 这两天被临时抽调到别的项目组去做一个小项目的迭代.这个项目前端是用React,只是个小型项目所以并没有 ...

最新文章

  1. 《人月神话》——外科手术队伍——笔记!
  2. 10个linux awk文本处理经典案例,关于AWK的10个经典案例
  3. Dedicated and Shared Server
  4. Java里的接口的interface 简单介绍.
  5. python蟒蛇代码_011 实例2-Python蟒蛇绘制
  6. spark通过合理设置spark.default.parallelism参数提高执行效率
  7. MySQL常用的日期时间函数
  8. 学生管理系统(软件工程)
  9. 春风十里,Webpower喊营销汪们更聪明地获得理想薪资
  10. 单片机通过WIFI模块(ESP8266)获取网络时间与天气预报
  11. 家用linux 版本哪个好,Ubuntu到底哪个版本最好用?
  12. python-pandas功能大全
  13. android自定义秒表,Android:一个简单的秒表实现
  14. 怎么压缩pdf文件大小?
  15. ikbc c104win键盘失灵以及数字键失灵
  16. opencv入手小训——画立体图形
  17. 密码学实验_7_S盒创建(python 实现)
  18. html是什么排列规律,单数和双数是什么 有什么排列规律
  19. 创作者基金新上线互动类型 NFTs,快来为你的体验添砖加瓦吧~
  20. TF-IDF 算法详解及 Python 实现

热门文章

  1. 前端月趋势榜:9 月最新上榜的、热门的 10 个前端开源项目 - 2109
  2. Web 趋势榜:上周最热门、又实用的 10 大 Web 项目 - 210813
  3. linux 产生0~9内的随机数
  4. Scala 语言输出的三种方式
  5. HBase get查询命令及VERSIONS版本
  6. Linux CentOS 6.x设置静态IP(亲测有效)
  7. Linux 命令:pwd、touch、ll、wget
  8. MySQL子查询优化思路
  9. Spring配置C3P0开源连接池
  10. impala和python_Impala和Hive之间有什么关系?