介绍class创建的组件中this.state

简介: 一、class创建的组件中this.state示例二、this.state的定义及注意事项

介绍class创建的组件中this.state

 

 

目录:

一、class创建的组件中this.state示例

二、this.state的定义及注意事项

 

一、class创建的组件中this.state示例

 

Props

age: 22

gender:“男”

name:zs

//代表所有的Props

 

代码及讲解:

 

import  React from  'react'  //将来,在每个独立的组件文件中,第一行,必须要先倒入react

//webpack 中,每一个单独的JS文件或JSX文件,都有自己独立的作用域;默认,外界无法访问模块中的成员;

 

export default function Hello(props) {  //使用function创建“Hello”组件    //使用class创建的组件是可读可写的

console.log(props)

return <div>

这是用function构造函数创建的组件--{props.name} -- {props.age} -- {props.gender}

</div>

}

//使用ES6  export default向外暴露成员

//export default Hello

//function创建组件可以被显示

//function创建的组件可以传参

//参数可以进行访问

 

//导入class继承

//import ‘@/03.class-继承-公共方法’

 

//class关键字创建组件

class Movie extends React.Component{

 

//构造器

constructor(){

 

//由于Movie组件,继承了React.Component这个父类,所以,自定义的构造器中,必须调用super()

super()

 

//只有调用了super()以后才能使用this关键字

 

msg:‘大家好,我是class创建的Movie组件’

}//

}

//可以把msg放到页面上进行展示

class Movie extends React.Component{

 

//构造器

 

constructor(){

 

//由于Movie组件,继承了React.Component这个父类,所以,自定义的构造器中,必须调用super()

super()

 

//只有调用了super()以后,才能使用this关键字

 

this.state = {  //这个this.state相当于Vue 中的data(){return { } }

 

}

}

 

//render函数的作用,是渲染当前组件所对应的虚拟DOM元素

 

render(){

 

//return null

 

//class关键字创建的组件中,如果想使用外接传递过来的props参数,不需要接收,直接通过this.props.***访问即可

 

//注意:不论是class还是普通function创建的组件,它们的props都是只读的,不能被统一赋值

 

//this.props.name = ‘李四

 

//class创建的组件中,this.state上的数据,都是可读可写的

 

//this.state.msg = ‘msg的值被我修改了

 

return<div>

 

{/*注意:在class组件内部,this表示当前的实例对象 */}

这是Movie组件 – {this.props.name} – {this.props.age} – {this.props.gender}

</div>

}

}

 

const user = {

 name:’zs’

 age:’22’

 gender:’

}

reactDOM.render(<div>

  123

{/*<Hello name=(user,name) age=(user,age)></Hello> */}

{/* <Hello {…user}></Hello> */}

{/*这里的Movie标签,就是Movie类的一个实例对象 */}

<Movie>{…user}</Movie>

</div>,document.getElementById(‘app’))

 

export default function Hello(props){

console.log(props)

return<div>

*这是用function构造函数创建的组件-- props.name--

(props.age) – (props.gender)

<h3>{this.state.msg}</h3>

</div>

}

//class创建的组件也可以进行传参

classfunction创建组件可以丢到页面上去显示。

 

这个class也是以标签来使用,这一点没有任何差别,再来看标点,普通function创建的组件能给他传参,直接在标签上给他传参就行。

 

class创建组件也能够直接给他传参,传参这一层也是完全一样的。还有传过来参数,是可以访问的,只不过里面是用props来接收的,这里面直接用this来进行访问,不论这种语法上有什么细微差别,不论最终外界传过来的参数,是左边儿的组件还是右边的组件都可以访问。

 

 

二、this.state的定义及注意事项

注意事项和组件对比:

 

使用function class 两种创建组件方式的对比

 

注意:使用class关键字创建的组件,有自己私有的数据和生命周期函数;

 

注意:使用function创建的组件,只有props,没有自己的私有数据和生命周期函数;

 

如果一个组件需要有自己的私有数据,则推荐使用:class创建的有状态组件

如果一个组件不需要私有的数据,则推荐使用:无状态组件

 

组件中的props state/data 之间的区别:

 

1.props中的数据都是外界传递过来的

2.state/data中的数据,都是组件私有的。(通过Ajax获取回来的数据,一般都是私有数据)

3.props中的数据都是只读的,不能重新赋值

4.state/data 中的数据,都是可读可写的。

 

定义:

1.用构造函数创建出来的组件:叫做“无状态组件“

2.class关键字创建出来的组件:叫做“有状态组件”

3.什么情况下使用有状态组件?什么情况下使用无状态组件?

有状态组件和无状态组件之间的本质区别就是:有无state属性、和有无生命周期函数

4.React官方反应:无状态组件,由于没有自己的state和生命周期函数,所以运行效率会比有状态组件稍微高一些。

相关文章
|
6月前
|
JavaScript
v-model绑定vuex的state
v-model绑定vuex的state
|
2月前
|
存储 JSON JavaScript
组件的创建,引用,样式隔离以及methods,data,properties和数据事件监听
详细介绍了微信小程序中组件的创建、引用(包括局部引用和全局引用)、样式隔离、组件的data、methods和properties,以及组件的数据监听器的使用方法和场景。
组件的创建,引用,样式隔离以及methods,data,properties和数据事件监听
|
1月前
|
前端开发 开发者
对比state和props的区别?
对比state和props的区别?
|
3月前
|
存储 前端开发
state 和 props 有什么区别?
【8月更文挑战第31天】
37 0
|
3月前
|
存储 前端开发
State 与 Props:详解区别
【8月更文挑战第24天】
43 0
|
4月前
|
JavaScript
vue 【详解】父子组件传值、父子组件数据双向绑定 —— : | update: |.sync | v-bind.sync | v-model(含model选项和自定义v-model)
vue 【详解】父子组件传值、父子组件数据双向绑定 —— : | update: |.sync | v-bind.sync | v-model(含model选项和自定义v-model)
41 1
|
6月前
v-model绑定vuex的state怎么实现?
v-model绑定vuex的state怎么实现?
|
6月前
|
前端开发
对比state和props的区别
对比state和props的区别
|
前端开发 JavaScript
props和state的区别
props和state的区别
91 0