React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

时间:2021-08-11 07:48:08

  创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

1、react组件

1.1、创建组件的方法

  1.1.1、函数组件

  定义一个组件最简单的方式是使用JavaScript函数

function fn(props){
return <h1>Hello,{props.name}</h1>;
}
该函数是一个React组件,它接收一个单一的 " props " 对象并返回了一个React 元素。我们之所以称这种类型的组件为函数组件

  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

React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

  子组件输出父组件传来的值

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

React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

父组件输出子组件传来的值

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按钮的时候

React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

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

React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

      React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

       React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

     React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

  React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值