组件从概念上看就像是函数,它可以接收任意的输入值(称之为“props”),并返回一个需要在页面上展示的React元素。
定义组件的两种方法:函数定义组件和类定义组件
函数定义
定义一个组件最简单的方式是使用JavaScript函数:
function HelloMessage(props) {
return <h1>Hello World!</h1>;
}
const element = <HelloMessage />;
ReactDOM.render(
element,
document.getElementById('example')
);
类定义组件
你也可以使用 ES6 class 来定义一个组件:
class Welcome extends React.Component {
render() {
return <h1>Hello World!</h1>;
}
}
const element = <Welcome />;
ReactDOM.render(
element,
document.getElementById('example')
);
const element = <HelloMessage /> 为用户自定义的组件。
注意:原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage
不能写成 helloMessage
。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。
如果我们需要向组件传递参数,可以使用 this.props 对象:
function HelloMessage(props) {
return <h1>Hello {props.name}!</h1>;
}
const element = <HelloMessage name="Runoob"/>;
ReactDOM.render(
element,
document.getElementById('example')
);
以上实例中name
属性通过props.name
来获取。
注意:在添加属性时, class
属性需要写成className
,for
属性需要写成htmlFor
,这是因为class
和 for
是 JavaScript 的保留字。
复合组件
我们可以通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离。
function Name(props) {
return <h1>网站标题:{props.name}</h1>;
}
function Url(props) {
return <h1>网站地址:{props.url}</h1>;
}
function Nickname(props) {
return <h1>网站内容:{props.nickname}</h1>;
}
function App() {
return (
<div>
<Name name="React.js" />
<Url url="http://www.https://www.jianshu.com/writer#/notebooks/29971130/notes/34731531/preview.com" />
<Nickname nickname=" React 组件" />
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById('example')
);
案例中App 组件使用了 Name、Url 和 Nickname 组件来输出对应的信息