React -- 函数式和类式组件

欢迎学习交流!!!
持续更新中…


模块与组件

模块

  • 向外提供特定功能的js程序, 一般就是一个js文件
  • 为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂。
  • 作用:复用js, 简化js的编写, 提高js运行效率

组件

  • 用来实现局部功能效果的代码和资源的集合(html/css/js/image等等)
  • 为什么要用组件: 一个界面的功能更复杂
  • 作用:复用编码, 简化项目编码, 提高运行效率

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

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

组件规则注意事项

  • 组件类的第一个首字母必须大写
  • 组件类必须有 render 方法
  • 组件类必须有且只有一个根节点
  • 组件属性可以在组件的 props 获取
    • 函数需要声明参数:props
    • 类直接通过 this.props

函数式组件(无状态)

  • 名字不能用小写
    • React 在解析的时候,是以标签的首字母来区分的
    • 如果首字母是小写则当作 HTML 来解析
    • 如果首字母是大小则当作组件来解析
    • 结论:组件首字母必须大写

注意:必须要有结束标签,如<MyComponent /><MyComponent><MyComponent />

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

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

    <script type="text/babel">
        // 1. 创建函数式组件
        function MyComponent() {
            console.log(this)  //undefined babel编译之后会开启严格模式(JS5中禁止this指向window)
            return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
        }
        // 2. 渲染组件到页面
        ReactDOM.render(<MyComponent />,document.getElementById('test'))
        /*
            执行了ReactDOM.render(<MyComponent />....之后发生了什么?
                1. React解析组件标签,找到MyComponent组件
                2. 发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,呈现在页面当中
        */
    </script>
</body>

类方式组件(有状态)

有关类

  • 类中的构造器不是必须写的,要对实例进行一些初始化的操作,比如添加指定属性时才写。
  • 如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的
  • 类中所定义的方法,都是放在了类的原型对象上,供实例去使用

在React中,定义/创建一个类必须要继承一个内置类Component

    <script type="text/babel">
        // 1. 创建类式组件    -->类名就是组件名
        class MyComponent extends React.Component{
            // 构造器中必须调用super,但构造器可以省略,render必须写且必须有返回值
            render () {
                // render放在哪里?   ---类的原型对象上,供实例使用 
                // render中的this是谁?    ---MyComponent的实例对象即MyComponent组件实例对象
                return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
            }
        }
        // 2. 渲染组件到页面     (render在此处仅仅是重名了)
        React.render(<MyComponent />,document.getElementById('test'))
    </script>
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
函数组件没有像类组件那样的生命周期方法,因为函数组件是以纯函数的方编写的,它们没有实例和状态的概念。然而,React函数组件中引入了一些钩子函数来实现类似的功能。 1. useEffect:可以在函数组件中使用 useEffect 钩子来处理副作用操作,比如订阅事件、发送网络请求、操作 DOM 等。它接收一个回调函数和一个依赖数组作为参数,回调函数会在每次渲染之后执行。依赖数组用于指定当某些值发生变化时才重新执行回调函数。如果依赖数组为空,则回调函数只在组件首次渲染后执行一次。 2. useState:可以使用 useState 钩子来在函数组件中管理状态。它返回一个状态值和一个更新状态的函数,可以通过解构赋值的方进行使用。每次调用更新状态的函数时,组件会重新渲染。 3. useMemo 和 useCallback:这两个钩子函数可以用来优化性能。useMemo 可以缓存计算结果,只有当依赖项发生变化时才重新计算。useCallback 可以缓存函数,只有当依赖项发生变化时才返回新的函数。 此外,React 还提供了一些其他的钩子函数,如 useContext、useReducer、useRef 等,用于处理上下文、状态管理和引用等。 总结来说,函数组件的生命周期可以通过 useEffect 和其他钩子函数来模拟和实现。它们提供了一种更简洁、灵活的方来编写组件,并且能够满足大部分的开发需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值