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

1.创建组件的方法   函数组件   class组件

1.1 函数组

无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `function`的形式在创建,并且该组件是无state状态的。具体的创建形式如下

 1 import React from ‘react ‘;
 2
 3 //定义一个React组件
 4 function App() {
 5   return (
 6     <div>
 7       hello React...
 8     </div>
 9   );
10 }
11
12 export default App;

1.1 class组件

`React.Component` 是以 `ES6` 的形式来创建react的组件的,是React目前极为推荐的创建有状态组件的方式,形式改为 `React.Component` 形式如下

 1 import React from ‘react‘;
 2
 3 //定义一个React组件
 4 class App extends React.Component{
 5   render(){
 6     return (
 7       <div>
 8         Hello,Reactjs!!
 9       </div>
10     );
11   }
12 }
13
14 export default App;
1 在其他文件中引用组件
2
3
4 import React from ‘react‘;
5 import ReactDOM from ‘react-dom‘;
6 //App组件,组件要求大写字母开头
7 import App from ‘./App‘;
8
9 ReactDOM.render(<App />, document.getElementById(‘root‘));

2.组件的props属性

2.1  概念 :react中说的单向数据流值说的就是props,根据这一特点它还有一个作用:组件之间的通信。props本身是不可变的,但是有一种情形它貌似可变,即是将父组件的state作为子组件的props,当父组件的state改变,子组件的props也跟着改变,其实它仍旧遵循了这一定律:props是不可更改的。

2.2    `props`属性的特点

1.每个组件对象都会有props(properties的简写)属性

2.组件标签的所有属性都保存在props中

3.内部读取某个属性值:this.props.propertyName

4.作用:通过标签属性从组件外 向组件内传递数据(只读 read only)

5.对props中的属性值进行类型限制和必要性限制

2.3  代码示例

使用函数组件:

 1 import React from ‘react‘;
 2 import ReactDOM from ‘react-dom‘;
 3
 4 //使用函数组件
 5 function User(props){
 6     //在组件中获取props属性值
 7     return <div>{props.name},{props.age}</div>
 8 }
 9
10 //定义数据
11 const person ={
12     name:‘张三‘,
13     age:20,
14     sex:‘男‘
15 }
16
17 ReactDOM.render(
18     <User {...person}></User>
19 , document.getElementById(‘root‘));

使用类组件:

 1 import React from ‘react‘;
 2 import ReactDOM from ‘react-dom‘;
 3
 4 //使用class组件
 5 class User extends React.Component{
 6     render(){
 7         return (
 8     <div>{this.props.name}--{this.props.age}</div>
 9         );
10     }
11 }
12
13 //数据
14 const person ={
15     name:‘张三‘,
16     age:20,
17     sex:‘男‘
18 }
19
20 ReactDOM.render(
21     <User {...person}></User>
22 , document.getElementById(‘root‘));

3.state属性的用法和特点

3.1

React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。

3.2代码示例:

 1 import React from ‘react‘;
 2 import ReactDOM from ‘react-dom‘;
 3
 4 class Person extends React.Component{
 5     //构造方法
 6     constructor(){
 7         super();
 8         this.state = {
 9             name: ‘tom‘
10         }
11     }
12
13     render(){
14         //state属性是可修改的
15         this.state.name = ‘jack‘;
16         return (
17         <h1>{this.state.name}</h1>
18         );
19     }
20 }
21
22 ReactDOM.render(<Person />, document.getElementById(‘root‘));

4.父子组件传值

4.1父组件传值子组件

在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到      这个param的值。

父组件向子组件传值,通过`props`,将父组件的`state`传递给了子组件。

代码如下- 父组件代码片段:

 1 constructor(props){
 2     super(props)
 3     this.state={
 4       message:"i am from parent"
 5     }
 6   }
 7   render(){
 8     return(
 9           <Child txt={this.state.message}/>
10     )
11   }
12 }

子组件代码片段:

1 render(){
2     return(
3           <p>{this.props.txt}</p>
4     )
5 }

完整示例:创建父组件index.js

 1 import React from ‘react‘;
 2 import ReactDOM from ‘react-dom‘;
 3 import User from ‘./User‘;//引入子组件
 4
 5 //定义数据
 6 const person = {
 7     name: ‘Tom‘,
 8     age:20
 9 }
10
11 ReactDOM.render(
12     //渲染子组件,并向子组件传递name,age属性
13     <User name={person.name} age={person.age}></User>
14     , document.getElementById(‘root‘));

创建子组件 :User.js

 1 import React from ‘react‘;
 2
 3 class User extends React.Component{
 4     render(){
 5         return (
 6             // 使用props属性接收父组件传递过来的参数
 7             <div>{this.props.name},{this.props.age}</div>
 8         );
 9     }
10 }
11
12 export default User;

5.兄弟组件传值

兄弟组件之间的传值,是通过父组件做的中转 ,流程为:

**组件A** -- `传值` --> **父组件** -- `传值` --> **组件B**

代码示例:创建Aclis.js 组件,用于提供数据

 1 import React from ‘react‘;
 2
 3 class Acls extends React.Component {
 4     //按钮点击事件,向父组件Pcls.js传值
 5     handleClick(){
 6         this.props.data("hello...React...");
 7     }
 8
 9     render(){
10         return (
11             <button onClick={this.handleClick.bind(this)}>Acls组件中获取数据</button>
12         );
13     }
14 }
15
16 export default Acls;

创建父组件 `Pcls.js` 用于中转数据

 1 import React from ‘react‘;
 2 import Acls from ‘./Acls‘;
 3 import Bcls from ‘./Bcls‘;
 4
 5 class Pcls extends React.Component {
 6     //构造函数
 7     constructor(){
 8         super();
 9         this.state = {
10             mess: ‘‘
11         }
12     }
13     //向子组件Acls.js提供的传值方法,参数为获取的子组件传过来的值
14     getDatas(data){
15         this.setState({
16             mess: data
17         });
18     }
19
20     render(){
21         return (
22             <React.Fragment>
23                 Pcls组件中显示按钮并传值:
24                 <Acls data={this.getDatas.bind(this)}></Acls>
25                 <Bcls mess={this.state.mess}></Bcls>
26             </React.Fragment>
27         );
28     }
29 }
30
31 export default Pcls;

创建子组件 `Bcls.js` 用于展示从 `Acls.js` 组件中生成的数据

 1 import React from ‘react‘;
 2
 3 class Bcls extends React.Component {
 4
 5     render(){
 6         return (
 7             <div>在Bcls组件中展示数据:{this.props.mess}</div>
 8         );
 9     }
10 }
11
12 export default Bcls;

原文地址:https://www.cnblogs.com/jiazhaolong/p/12075482.html

时间: 2024-08-07 14:36:30

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

react ,父子调用子组件的方法与子组件调用父组件的方法

1.父组件调用子组件的方法给子组件的标签 定义一个属性,例如 ref="zizu" ------------- 父组件通过,this.refs.biaoji.dream('哈哈') //调用子组件的dream方法 2.子组件调用父组件的方法 2.1.首先父组件需要通过给子组件自定义属性,把方法传递给子组件.2.2.子组件通过this.props 接收父组件的方法,this.props.方法名称().这样就可以调用父组件的方法了 原文地址:https://www.cnblogs.com/

React教程:父子组件传值(组件通信)

1.父组件传值子组件 在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到这个param的值. 父组件向子组件传值,通过props,将父组件的state传递给了子组件. 父组件代码片段: constructor(props){ super(props) this.state={ message:"i am from parent" } } render(){ return( <Child txt={this.state.message}/>

vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> <child v-bind:my-message="parentMsg"></child>//注意传递参数时要用-代替驼峰命名,HTML不区分大小写 </div> 子组件: Vue.component('child', { // camelCase in Ja

父组件中调用子组件的方法和属性

方案:利用ref属性可以获取到dom元素或者是子组件,从而可以调用子组件的方法(注意2.0版本用ref取代了el) 1.当ref直接定义在dom元素上时,则通过this.$refs.name可以获取到dom,对dom进行原生的操作 <div class="foods-wrapper" ref="foods-wrapper"> 通过this.$refs获取到dom进行操作(注意ref属性的命名不能用驼峰,同时获取的时候也不能用) let menuList

详解vue全局组件与局部组件使用方法

这篇文章主要为大家详细介绍了vue全局组件与局部组件的使用方法,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. vue全局/局部注册,以及一些混淆的组件main.js入口文件的一些常用配置, 在入口文件上定义的public.vue为全局组件,在这里用的是pug模版 .wraper 的形式相当于<div class=wraper></div> -main.js文件 **main.js入口文件的内容** import Vue from 'vue' im

第六章 组件 63 组件传值-父组件向子组件传值和data与props的区别

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <meta http-equiv="X-UA-Compati

vue--父组件向子组件传参--父组件定义v-bind:参数名--子组件接收props----子组件调用父组件的方法(子组件向父组件传参)父组件@事件名称--子组件接收this.$emit

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

VueJS 如何编译服务器端远程模板【异步组件+简单方法】

说明 有些时候你可能需要从后台获取模板,并在前台在自己编译,这在用 AngularJS 1.x 的时候似乎很常见,可以直接用 ng-include 搞定,在 Vue 1.x 的时候也可以直接用 partial 搞定.但是在 Vue 2.x 中,官方取消了 partial 这个 API,根据情况推荐使用 component 代替,参见这里 需求 那我现在有个需求,就是从后台获取一个字符串模板(假设里面包含 v-model 等 vue 指令),模板需要拿到前台来编译,那该怎么实现呢?(这种需求确实比

在JS中使用COM组件的方法

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数 { // TODO: 在此添加实现代码 MessageBox(NULL,L"test",L"test",MB_OK); return S_OK; } STDMETHODIMP Ctest::test1(BSTR a1) //有一个字符串输入参数 { // TODO: 在此添加实现代码 MessageBox(