React创建组件有两种方式 一种是function创建方式 还有一种更常用且推荐的 就是class创建方式了 class方式创建组件 有三个需要注意的地方: 在class关键字创建的组件中 若想使用外界传来的props参数 无需接收 注: 使用class关键字方式创建的组件拥有其自己的私有数据 用 使用class关键字方式创建的组件拥有其自己的私有数据(this.state)和生命周期函数 因此 用function构造函数创建的组件 被称为无状态组件(使用频率不高) 有状态组件和无状态组件的本质区别是有无state属性和生命周期函数 (state英文翻译过来就是状态) props中的数据都是外界传入到组件内的 props中的数据都是只读的 并不能重新为其赋值
Class创建组件
具体可以看我这篇博客:React学习之旅Part4:React组件的function创建方式及传值、抽离为单独jsx文件
import React from 'react' import ReactDOM from 'react-dom' // 若要使用class关键字来定义组件 则必须让组件继承React.Component class Hello extends React.Component { // 必须用render函数渲染 render() { // 必须返回合法的JSX虚拟DOM结构 return <h1>Hello</h1> } } ReactDOM.render(<div> Test <Hello></Hello> </div>,document.getElementById("app"))
传递参数
直接通过this.props.xxx
即可访问
在class组件内部 this表示当前组件的实例对象class Hello extends React.Component { render() { return <h1>Hello{this.props.name}{this.props.age}</h1> } } const user={ name:"陈涛", age:18 } ReactDOM.render(<div> Test <Hello></Hello> <hr/> {/* 传递参数 */} <Hello {...user}></Hello> </div>,document.getElementById("app"))
...
是ES6的展开运算符 对象里面有多少属性 就传递多少属性
和name={user.name} age={user.age}
意义相同私有数据(this.state)
但使用function方式ic换件的组件 只有props 并没有自己的私有数据和生命周期函数
因此 可以理解为 用class方式创建的组件会 更加全this.state
设置私有数据 相当于Vue的data(){ return {} }
这是可读可写的class Hello extends React.Component { constructor() { super(); // 为组件绑定私有数据 this.state={ msg:"Hello World" }// 相当于Vue的data(){ return {} } 可读可写 } // 必须用render函数渲染 render() { // 设置数据 this.state.msg="Hello!" return <h1> Hello <span>{this.state.msg}</span> </h1> } } ReactDOM.render(<div> Test <Hello></Hello> </div>,document.getElementById("app"))
有状态组件和无状态组件
而 使用function方式创建的组件 并没有其自己的私有数据和生命周期函数
而用class关键字创建的组件被称为有状态组件组件中props和state的区别
而state中的数据是组件私有的(通常是Ajax获取的数据)
而state中的数据是可读可写的
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算