当前位置: 首页 > Web前端 > JavaScript

react05就是这样——Components&Props

时间:2023-03-27 16:23:28 JavaScript

什么是组件:用于实现局部功能的可重用代码片段,比如很多界面都会用到“分页”功能,那么可以封装成一个独立的component这样,使用分页的界面只需要引入组件,无需重写代码1.定义组件React中有两种组件,一种是函数组件,一种是类组件。1.1函数组件定义组件最简单的方式就是写JavaScript对于React,可以返回一个React元素的函数称为组件functionMyComponent(){return

我是一个函数组件

;}在线代码1.2类组件类组件的声明过程会比较繁琐,需要使用class和extends关键字继承React.Component{}render()函数,返回该类实例要创建的元素。classMyComponentextendsReact.Component{render(){return

我是类组件

;}}网上的代码,无论是函数组件还是类组件,在React中都是等价的,只是类组件有更多的特性2渲染组件同一个组件用在不同的界面,可能想要显示不同的内容。例如,我们的自定义组件包含一个h2标签。如果我们想在两个不同的界面中显示函数和类怎么办?管理?你可以在使用组件的时候添加属性,react会将添加的属性转换成一个对象传递给组件。这个对象被称为“道具”。函数组件和类组件可以通过“形式参数”和实例属性来使用这个对象,比如:functionMyComponent(props){console.log(props)return

我是一个函数组件

;}ReactDOM。render(,document.getElementById("root"));classMyComponentextendsReact.Component{render(){console.log(this.props);return

我是类组件

;}}ReactDOM.render(,document.getElementById("root"));两者都输出相同的对象:在线代码所以我们可以传入不同的属性让组件呈现不同的内容:functionMyComponent(props){return

我是一个{props.name}组件

;}ReactDOM渲染(,document.getElementById("root"));下面是这个例子中发生的事情:我们调用ReactDOM.render()函数并传入React调用MyComponent组件作为参数并将{name:'customfunction'}作为props传入.MyComponent组件返回

Iamacustomfunctioncomponent

元素。ReactDOM高效地将DOM更新为

我是自定义函数组件

。3请注意,组件名称必须以大写字母开头。传入属性值是字符串和数字的区别:Numbers:Strings:多个属性可以使用扩展运算符constobj={name:'React',age:18}注意在线代码中不能省略{}3CompositeComponentsComponents可以在其输出中引用其他组件例如,我们可以创建一个可以呈现Welcome的App组件多次Component:functionWelcome(props){return

Hello,{props.name}

;}functionApp(){return(
);}ReactDOM.render(,document.getElementById('root'));这使得我们可以使用同一个组件来构建不同的层新组件在线代码4Extractcomponent对于一个复杂的组件,我们应该尽量将其拆分成更小的组件,以提高其可维护性和可读性。例如,参考下面的评论组件:alt={props.author.name}/>{props.author.name}
{props.text}
{formatDate(props.date)}
);}该组件用于描述社交媒体网站上的评论功能,它接收作者(object)、文本(string)和日期(date)作为props这个组件由于嵌套关系,很难维护和复用它的部分,所以让我们从中提取一些组件。首先,我们将提取Avatar组件:functionAvatar(props){return();}Avatar不需要知道它在Comment组件内部是如何渲染的,因此我们给它的props起一个更通用的名字:user,notauthor.建议从组件本身的角度来命名props,而不是依赖于调用组件的上下文。现在可以在Comment中引用Avatar组件了:-name">{props.author.name}{props.text}{formatDate(props.date)});}接下来,我们将提取UserInfo组件,它在用户名旁边呈现一个Avatar组件:functionUserInfo(props){return({props.user.name});}进一步简化Comment组件:functionComment(props){return({道具。text}{formatDate(props.date)});}5Props对于props只读,React有一个严格的规定:是否组件是使用函数或通过类声明声明的,它绝不能修改自己的道具6Timerfunctiontick(){constelement=(

currenttime:{newDate().toLocaleTimeString()}.

);ReactDOM.render(element,document.getElementById('root'));}setInterval(tick,1000);在本例中,每秒调用一次tick函数,页面将更新当前时间。网上的代码将其封装为一个组件:classClockextendsReact.Component{render(){return

nowTime:{newDate().toLocaleTimeString()}

;}}functiontick(){ReactDOM.render(,document.getElementById("root"));}setInterval(tick,1000);我们在JSX在线代码中硬编码了时间如果我们想自己传入显示的内容:classClockextendsReact.Component{render(){consttime=this.props.time;返回

当前时间:{time}

;}}functiontick(){ReactDOM.render(,document.getElementById("root"));}setInterval(tick,1000);以便我们控制显示格式在线代码公众号【前端】问答