组件从概念上看就像是函数,它能够接收任意的输入值(称之为“props”),并返回一个须要在页面上展现的React元素。javascript
1.1 函数定义组件java
定义一个组件最简单的方式是使用JavaScript函数:函数
function Welcome(props) { return <h1>Hello, {props.name}</h1>; }
该函数是一个有效的React组件,它接收一个单一的“props”对象并返回了一个React元素。咱们之因此称这种类型的组件为函数定义组件,是由于从字面上来看,它就是一个JavaScript函数。this
1.2 ES6 class 来定义组件spa
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }
React元素也能够是用户自定义的组件。当React遇到的元素是用户自定义的组件,它会将JSX属性做为单个对象传递给该组件,这个对象称之为“props”。code
function Welcome(props) { return <h1>Hello, {props.name}</h1>; } const element = <Welcome name="Sara" />; ReactDOM.render( element, document.getElementById('root') );
上段代码会在页面上渲染出”Hello,Sara”。这里定义组件使用的是第一种方式 函数定义组件,我本身尝试了第二种 ES6 class方式来定义组件,报错。先日后学,再边学便理解。对象
官网上告诉咱们上段代码执行过程以下:ip
<Welcome name="Sara" />
元素调用了 ReactDOM.render()
方法。{name: 'Sara'}
做为props传入并调用 Welcome
组件。Welcome
组件将 <h1>Hello, Sara</h1>
元素做为结果返回。<h1>Hello, Sara</h1>
。警告:element
组件名称必须以大写字母开头。get
例如,
<div />
表示一个DOM标签,但<Welcome />
表示一个组件,而且在使用该组件时你必须定义或引入它。
组件能够在它的输出中引用其它组件,这就可让咱们用同一组件来抽象出任意层次的细节。在React应用中,按钮、表单、对话框、整个屏幕的内容等,这些一般都被表示为组件。
警告:
组件的返回值只能有一个根元素。这也是咱们要用一个
<div>
来包裹全部<Welcome />
元素的缘由。
你能够将组件切分为更小的组件。
提取组件一开始看起来像是一项单调乏味的工做,可是在大型应用中,构建可复用的组件彻底是值得的。当你的UI中有一部分重复使用了好几回(好比,
Button
、Panel
、Avatar
),或者其自身就足够复杂(好比,App
、FeedStory
、Comment
),相似这些都是抽象成一个可复用组件的绝佳选择,这也是一个比较好的作法。
不管是使用函数或是类来声明一个组件,它决不能修改它本身的props。