React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
1、react组件
1.1、创建组件的方法
1.1.1、函数组件
定义一个组件最简单的方式是使用JavaScript函数
function fn(props){
return <h1>Hello,{props.name}</h1>;
}
1.1.2、类组件
//引入react模块
import React from 'react';
//声明子组件son
class R extends React.Component {//重写方法render
render() {
return (
// 模板字串
<React.Fragment>
{/* jsx */}
<h1>hello,{props.name}</h1>
</React.Fragment>
);
}
}
1.2组件的props属性
先在组件上通过自定义属性赋值
函数组件中,在函数上定义形参props,在函数中 props.属性名
function name(props) {
console.log(props)//输出‘Tom’
}
类组件中,通过 this.props.属性名
class Rea extends React.Component {
render() {
return (
<React.Fragment>
{console.log(this.props.name)}
{/* 输出’Tom‘ */}
</React.Fragment>
);
}
}
作用:在组件之间进行传值
特点:无论是使用函数或是类来声明一个组件,它不能修改它自己的props值。是只可读不可写
1.3组件的state属性
state的使用
//引入react模块
import React from 'react'
class Act extends React.Component {
constructor(){
super()
this.state={
name:'lxr'
}
}
render() {
return (
<React.Fragment>
{console.log(this.state.name)}
{/* 这里输出name值为’lxr‘ */}
</React.Fragment>
);
}
}
通过修改状态来更改name值
//引入react模块
import React from 'react'; class Act extends React.Component {
constructor(){
super()
this.state={
name:'lxr'
}
}
update(){
//重新设置name值
this.setState({
name:'rlh'
})
}
render() {
return (
<React.Fragment>
{/* 这里绑定事件 */}
<button onClick={this.update.bind(this)} >点击</button>
{console.log(this.state.name)}
</React.Fragment>
);
}
}
state是组件内独有的,外部无法向内部传递state,也无法直接改变state的值
而改变state是使用React组件基类中的一个自带函数:
this.setState({
...
});
使用这个函数之前一定要注意this的作用域,箭头函数中的this指向外部this,而普通函数中的this指向函数本身
2、react传值
2.1、父传子
//引入react模块
import React from 'react';
//引入Son模块
import Son from './Son'; //声明父组件father
class Father extends React.Component {
//父类方法render
render() {
return (
<React.Fragment>
{/* 使用子模块Son 并把mess传给子组件,方法名为mess */}
<Son mess='父组件传来的' />
</React.Fragment>
);
}
} export default Father;
//引入react模块
import React from 'react';
//声明子组件son
class Son extends React.Component { //子类方法render
render() {
return (
<React.Fragment>
{/* 用构造方法里的props来调父组件传来的mess */}
{console.log(this.props.mess)}
</React.Fragment>
);
}
}
//向外暴露
export default Son

子组件输出父组件传来的值
2.2、子传父
//引入react模块
import React from 'react';
//引入Son模块
import Son from './Son'; //声明父组件father
class Father extends React.Component {
//父组件的father方法
father(msg){
console.log(msg)
} //父类方法render
render() {
return (
<React.Fragment>
{/* 使用子模块Son 把父组件的father方法传给子组件*/}
<Son father= {this.father.bind(this)} />
</React.Fragment>
);
}
}
//向外暴露
export default Father;
//引入react模块
import React from 'react';
//声明子组件son
class Son extends React.Component { //子类方法render
render() {
return (
<React.Fragment>
{/* 调用父组件传来的father方法 */}
{this.props.father('来自子组件传来的数据')}
</React.Fragment>
);
}
}
//向外暴露
export default Son

父组件输出子组件传来的值
2.3、兄弟相传
- 父组件
//引入react模块
import React from 'react';
//引入Son模块
import Son from './Son';
//引入Son0模块
import Son0 from './Son0'; //声明父组件father
class Father extends React.Component {
constructor(){
super()
//给state定义mess为空值
this.state={
mess:''
}
}
//父组件的father方法
father(msg){
//控制台输出子组件传来的数据
// console.log(msg)//输出:来自son的数据
//给状态里的mess设置值
this.setState({
mess:msg
})
} //父类方法render
render() {
return (
<React.Fragment>
{/* 使用子模块Son 把父组件的father方法传给子组件*/}
<Son father= {this.father.bind(this)} />
{/* 把子组件son传来的值再传给子组件son0 */}
<Son0 mess={this.state.mess} />
</React.Fragment>
);
}
}
//向外暴露
export default Father;
- 子组件1
//引入react模块
import React from 'react';
//声明子组件son
class Son extends React.Component {
//子组件的son方法
son(){
//使用father传来的方法,并返回数据
this.props.father('来自son的数据')
}
//子类方法render
render() {
return (
<React.Fragment>
{/* 绑定click时间点击的时候调用son方法 */}
<button onClick={this.son.bind(this)}>来自子组件的按钮</button>
</React.Fragment>
);
}
}
//向外暴露
export default Son
- 子组件2
//引入react模块
import React from 'react';
//声明子组件son0
class Son0 extends React.Component {
//子类方法render
render() {
return (
<React.Fragment>
{console.log(`我是Son0 这是:${this.props.mess}`)}
</React.Fragment>
);
}
} export default Son0;
当我点击button按钮的时候

son0.js输出来自son.js的数据

















React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值的更多相关文章
- react中直接调用子组件的方法(非props方式)
我们都知道在 react中,若要在父组件调用子组件的方法,通常我们会采用在父组件定义一个方法,作为props转给子组件,然后执行该方法,可以获取到子组件传回的参数以得到我们的目的. 显而易见,这个执行 ...
- ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State
开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...
- 创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
1.创建组件的方法 函数组件 class组件 1.1 函数组 无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `functi ...
- React中props和state相同点和不同点
朋友们,我想死你们了,最近这几天忙着和病魔作斗争所以没怎么写博客,今天感觉好点了,赶紧来写一波,就是这木敬业. 今天我们来讨论讨论props和state相同点和不同点 首先我来概要说明一下这两者 pr ...
- react创建组件的几种方式及其区别
react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件 ③.es6形式的extends React.Component定义的组 ...
- React创建组件的三种方式及其区别
内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...
- 四、React创建组件、 JSX使用、绑定数据、引用图片方式、数组(列表)循环输出
接:https://www.cnblogs.com/chenxi188/p/11702799.html 用上节建好的my-app项目: my-app/ README.md node_modules/ ...
- react 中子组件调用父组件的方法
1.在父组件中定义方法,并绑定在子组件上 // 在子组件中调用父组件中的方法 import React,{Component} from 'react'; import Child from './c ...
- React创建组件的不同方式(ES5 & ES6)
一. 首先缕清楚React.createElement.React.createClass.React.Component之间的关系 1. React.createElement(HTML eleme ...
随机推荐
- Linux下用source insight的另一种方式--Samba
花了一些时间想找一个在Linux下的类似source insight的东东,网上有人推荐的source navigator,kscope之类,就那么几种颜色(也许没深入设置),也能叫语法高亮?至于其他 ...
- POSIX 正则表达式 BRE与ERE的差异
BRE,标准正则表达式,basic regular expressions ERE,扩展正则表达式,Extended Regular Expressions POSIX 正则表达式 传统上,POSIX ...
- C#环境配置
由于C#是,Net框架的一部分,且用于编写.Net应用程序,所以我们需先了解下C#与.Net框架之间的关系. .Net框架(.Net Framework) .Net框架是一个创新的平台,能帮你编写出下 ...
- <compilation debug="true" targetFramework="4.5.2"> 报错解决方案
有的时候新建项目,默认会选择比较高的 .net framework 版本如 4.5.2 有的时候发布项目就会遇到这个问题 解决的话 改成4.0就行了! 看你发布在哪里,如果在本地或者服务器,只要去下载 ...
- ActiveMq C# 消息特性:延迟和定时消息投递
ActiveMQ from version 5.4 has an optional persistent scheduler built into the ActiveMQ message broke ...
- CLOS : Common Lisp 的面向对象支持
1. defclass ( :accessor/reader/writer ; :initarg ; :initform 2. defgeneric 3. defmethod ----- ...
- IIS配置——常见问题
1.控制面板->程序和功能->打开或关闭Windows功能->Internet信息服务 勾选如下这些选项 2.新建一个网站 3.HTTP 错误 403.14 选择目录浏览然后启用即可 ...
- python——CSV转Excel
在转换之前,事先需要将csv文件另存为此格式 import pandas as pd def csv_to_xlsx_pd(): csv = pd.read_csv(r'C:\Users\Jery\D ...
- JDK相关目录介绍
JDK安装后会在硬盘生成一个目录,这个目录被成为JDK安装目录 bin目录: 该目录里用于存放一些可执行文件 .例如:javac.exe(java编译器),java.exe(java运行工具),jar ...
- QML官方文档:Qt Quick Controls 1和2对比
Qt Quick Controls有1和2两个版本,在程序中会看到好多1和2版本混合使用的情况. 原文:https://doc.qt.io/qt-5/qtquickcontrols2-differen ...