React 入门:面向组件编程

模块与组件、模块化与组件化的理解

模块

  • 如何理解模块?
    模块就是向外提供特定功能的 js 程序,一般就是一个 js 文件。
  • 为什么要拆成模块?
    随着业务逻辑增加,代码越来越多且复杂,根据业务逻辑或者其他规则,将大块复杂的代码拆分成模块,更容易管理和复用。
  • 模块的作用
    可以复用 js,简化 js 的编写,提高 js 运行效率。

组件

  • 如何理解组件?
    组件用来实现局部功能效果的代码和资源的集合(html/css/js/image 等等)。
  • 为什么要有组件?
    一个界面的功能更复杂,很多结构类似的功能重复,为了复用和便于管理,便引入了组件的概念。
  • 组件的作用
    复用编码,简化项目编码,提高运行效率。

模块化

当应用的 js 都以模块来编写的。这个应用就是一个模块化的应用。

组件化

当应用是以多组件的方式实现,这个应用就是一个组件化的应用。


React 面向组件编程

React 提供了两种定义组件的方式:

函数式组件

  • 创建函数式组件,必须注意以下几点:
    • 函数名称首字母必须大写;
    • 函数必须有返回值;
    • 函数内的this为undefined,是因为 babel 编译后开启了js的严格模式。
  • 渲染函数组件注意项:
    • 调用组件必须使用组件标签(如:<MyComponent/>),不能直接使用函数名称。
  • 函数式组件代码简单语法示例
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>1_函数式组件</title>
</head>

<body>
    <!-- 准备好一个容器 -->
    <div id="app"></div>

    <!-- step01: 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- step02: 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- step03: 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel"> /* 此处一定要写babel */

        // 1. 创建函数式组件
        function MyComponent() {
            console.log(this) // 此处的 this 是 undefined,是因为 babel 编译后开启了js的严格模式
            return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
        }
        // 2. 渲染组件到页面
        ReactDOM.render(<MyComponent/>, document.getElementById('app'))
    </script>
</body>

</html>

【语法解析】
执行了ReactDOM.render(……)之后,发生了什么?

  1. React 解析组件标签,找到了MyComponent组件。
  2. 发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,并呈现到页面中。

类式组件

见名知意,类式组件就是基于 ES6 的 Class 实现的,如果您对 ES6 的类不熟悉或者有所遗忘,请移步 《js 中类 class 的基本知识》 快速 GET。

  • 创建类式组件,必须注意以下几点:
    • 必须继承 React 的 Component 类;
    • 必须有 render 方法,而且 render 方法必须有返回值(返回虚拟DOM):
    • 调用组件必须使用组件标签(如:<MyComponent/>),不能直接使用类名。
  • 类式组件代码简单语法示例
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>2_类式组件</title>
</head>

<body>
    <!-- 准备好一个容器 -->
    <div id="app"></div>

    <!-- step01: 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- step02: 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- step03: 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel"> /* 此处一定要写babel */

        // 1. 创建类式组件
        class MyComponent extends React.Component {
            render() {
                // render 是放在哪里的?—— MyComponent 的原型对象上,供实例使用。
                // render 中的 this 是谁?—— MyComponent 的实例对象 或者 MyComponent 组件对象实例。
                console.log('render 中的 this: ', this)
                return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
            }
        }

        // 渲染组件到页面
        ReactDOM.render(<MyComponent/>, document.getElementById('app'));
    </script>
</body>

</html>

【语法解析】
执行了 ReactDOM.render(……)之后,发生了什么?

  1. React 解析组件标签,找到了 MyComponent 组件。
  2. 发现组件标签是使用类定义的,随后 new 出来该类的实例,并通过该实例调用到原型上的 render 方法。
  3. 将 render 返回的虚拟 DOM 转为真实 DOM,随后呈现在页面中。

本文只是简单介绍了一下 React 组件编程的思维和方式,作为一个引子,后续我会继续分享更深入 React 组件编程的相关知识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西涯三锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值