美文网首页React JSWeb前端之路让前端飞
React学习教程(4)元素&组件

React学习教程(4)元素&组件

作者: 四冶读史 | 来源:发表于2017-10-27 11:12 被阅读34次

概述

元素是构成React应用的最小单位,是用来你在屏幕上看到的内容。与浏览器的DOM元素不同,React当中的元素事实上是普通的对象,React DOM可以确保浏览器DOM的数据内容与React元素保持一致。
React元素是不可变的,当元素被创建好后,是无法改变其内容和属性的。一个元素就好像是动画里的一帧,它代表应用界面在某一时间点的样子。如果要改变元素的内容和属性,唯一的办法就是创建一个新的元素替换原来的元素。当然,React DOM在渲染元素时,会比较前后内容的不同,只渲染更新的部分。
组件可以将UI切分成一些的独立的、可复用的部件,这样你就只需专注于构建每一个单独的部件。
组件从概念上看就像是函数,它可以接收任意的输入值(称之为“props”),并返回一个需要在页面上展示的React元素。
元素不是组件,只是组件的一部分,这个不要搞混淆。
元素渲染
定义一个元素,并将该元素渲染到真实的DOM中去

const element = <h1>hello world</h1>
ReactDOM.render(
    element, 
    document.getElementById('root')
);

定义组件

组件的定义有2种方式,函数和类。
注:组件必须以大写字母开头。

函数定义组件

用JavaScript函数定义组件是最简单的方式

function Hello(props) {
    return <h1>hello, {props.name}</h1>
}

该函数是一个有效的React组件,它接收一个单一的“props”对象并返回了一个React元素。我们之所以称这种类型的组件为函数定义组件,是因为从字面上来看,它就是一个JavaScript函数。

类定义组件

使用 ES6 class 来定义一个组件:

class Hello extends React.Component {
    render() {
        return <h1>Hello, {this.props.name}</h1>;
   }
}

以上2个组件在React中是相同的。

组件渲染

元素可以是DOM标签:

const element = <h1>hello world</h1>

也可以是自定的组件:

const element = <Hello name="zhang" />

当React遇到元素是用户自定义的组件时,它会将JSX属性作为单个对象传递给该组件,这个对象称之为“props”,建议就用“props”。
以下代码将会在浏览器中显示“hello,zhang”

function Hello(props) {
    return <h1>hello, {props.name}</h1>;
}
const element = <Hello name="zhang" />
ReactDOM.render(
    element, 
    document.getElementById('root')
);

这个过程是怎么发生的?
1.对元素<Hello name="zhang" />调用了React.render()方法;
2.React将{name: 'zhang'}作为props对象属性传入并调用Hello组件;
3.Hello组件读取props.name,并返回<h1>hello, zhang</h1>;
4.React DOM将DOM更新为<h1>hello, zhang</h1>;
也可以直接渲染组件,效果是一样的:

ReactDOM.render(
    <Hello name="zhang" />, 
    document.getElementById('root')
);

组合组件

组件可以在它的输出中引用其它组件,这样,我们就可以用同一组件来抽象出任意层次的细节,也可以引用不同的组件,组成更复杂的组件。因此,可以将组件细化,最好一个组件只干一件事。复杂的组件就是通过这些简单的组件组合起来的,这样就可以实现组件的复用。在React中,按钮、表单、图片、甚至整个屏幕都可以被表示为组件。
我们可以创建一个Hellos组件,多次渲染Hello组件:

function Hello(props) {
    return <h1>hello, {props.name}</h1>;
}​
function Hellos(props) {
    return <div>
                <Hello name="zhang" />
                <Hello name="huang" />
                <Hello name="liu" />
           </div>;
} 
ReactDOM.render(
    <Hellos />, 
    document.getElementById('root')
);

当需要渲染不同组件时,也是一样的道理。但是请注意,组件返回只能有一个父元素/根元素,当需要返回多个组件时,可以用一个元素将其包含起来(比如<div></div>)

props

props是作为一个对象传递给组件的,不管组件是函数组件还是类组件,只能读取props的属性值而不能修改,理论上只要传入的值相同,读取输出的也是一样的。但是应用界面是动态的,当要改变内容时又该如何?
这就是后面要讲的state概念。
State可以在不违反上述规则的情况下,根据用户操作、网络响应、或者其他状态变化,使组件动态的响应并改变组件的输出。
其实就是在state发生改变后重新渲染组件。

注:
本教程相关的所以源码,可在https://github.com/areawen2GHub/reacttest.git下载

参考地址:
https://react.bootcss.com/react/docs/rendering-elements.html
https://react.bootcss.com/react/docs/components-and-props.html

相关文章

  • React学习教程(4)元素&组件

    概述 元素是构成React应用的最小单位,是用来你在屏幕上看到的内容。与浏览器的DOM元素不同,React当中的元...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React 进阶之组件实战视频教程(10 个视频)

    React 进阶之组件实战视频教程(10 个视频) 这套课程来学习各种 第三方 React 的组件库 React ...

  • React基础

    react 教程 react 组件介绍 react state 介绍 react Props 介绍 React:组...

  • React系统性学习(下)

    $ 前言   在《React系统性学习(上)》中我们主要学习了 什么是React JSX语法 元素渲染 组件(Co...

  • React Native 学习笔记

    手册&教程 React Native指南汇集了各类react-native学习资源、开源App和组件 中文交流区 ...

  • React概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • React学习分享(二)

    各位好,上一篇文章我们介绍了React基础元素的使用和JSX等一些知识,现在我们继续来学习React。 组件 组件...

  • React开发相关资料

    React-Router 中文简明教程 总结 React 组件的三种写法 及最佳实践 [涨经验] React-UI组件

  • React学习(5)-React中组件的数据-props

    前言 开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好...

网友评论

    本文标题:React学习教程(4)元素&组件

    本文链接:https://www.haomeiwen.com/subject/oojrpxtx.html