组件,从概念上类似于 JavaScript 函数。它接受任意的入参(即 “props”),并返回用于描述页面展示内容的 React 元素。

函数组件与 class 组件

React可以通过 class函数 两种形式创建组件, 但是在函数组件中打印this,我们获取的是undefined. 这个问题我们暂时先不讨论, 大家知道有这两种方式,接下来还是用我们熟悉的 class形式进行演示.

  1. var msg = 'hello,world';
  2. class HelloWorld extends React.Component {
  3. render(){
  4. return (
  5. <div>
  6. <h2>{msg}</h2>
  7. </div>
  8. )
  9. }
  10. }
  11. // 通过调用React自身方法render可以得到当前组件的实例对象,并渲染到页面容器.
  12. ReactDOM.render(<HelloWorld />,document.getElementById('root'));

比如函数形式:

  1. var msg = 'hello,world';
  2. function HelloWorld(){
  3. console.log(this); // undefined
  4. return (
  5. <div>
  6. <h2>{msg}</h2>
  7. </div>
  8. )
  9. }
  10. // 通过调用React自身方法render可以得到当前组件的实例对象,并渲染到页面容器.
  11. ReactDOM.render(<HelloWorld />,document.getElementById('root'));

组合组件

组件可以随意组合和嵌套,我们把三个 <HelloWorld/>组件放到 <Demos /> 组件中,并且渲染<Demos /> 组件.
注意: 任何组件有且只有一个 根节点 .

  1. var msg = 'hello,world';
  2. class HelloWorld extends React.Component {
  3. render(){
  4. return (
  5. <div>
  6. <h2>{msg}</h2>
  7. </div>
  8. )
  9. }
  10. }
  11. class Demos extends React.Component {
  12. render(){
  13. return (
  14. <div>
  15. <HelloWorld/>
  16. <HelloWorld/>
  17. <HelloWorld/>
  18. </div>
  19. )
  20. }
  21. }
  22. // 通过调用React自身方法render可以得到当前组件的实例对象,并渲染到页面容器.
  23. ReactDOM.render(<Demos />,document.getElementById('root'));

props给组件传参

props是组件的属性,可以通过props获取组件外部传递的属性和值. 可以同时传递多个参数,通过参数名称获取.

  1. var msg = 'hello,world';
  2. class HelloWorld extends React.Component {
  3. render(){
  4. return (
  5. <div>
  6. <h2>组件: {this.props.value}</h2>
  7. {this.props.componentName?<p>{this.props.componentName}</p>:<p>未命名</p>}
  8. </div>
  9. )
  10. }
  11. }
  12. class Demos extends React.Component {
  13. render(){
  14. return (
  15. <div>
  16. <HelloWorld value={1} componentName="组件1"/>
  17. <HelloWorld value={2}/>
  18. <HelloWorld value={3}/>
  19. </div>
  20. )
  21. }
  22. }
  23. // 通过调用React自身方法render可以得到当前组件的实例对象,并渲染到页面容器.
  24. ReactDOM.render(<Demos />,document.getElementById('root'));

Props 的只读性

组件无论是使用函数声明还是通过 class 声明,都决不能修改自身的 props。