【 React 】函数组件之组合、自定义Hook

函数组件

不支持像类组件那样的继承,但可通过其他方式来实现类似功能,如组合、自定义Hook等。

1、什么是组合

组合是指在React中通过将多个组件结合在一起来创建复杂的 UI 结构。

以下是一个简单的组合案例:

javaScript 复制代码
// 头部组件
function Header() {
  return <header>This is the header</header>;
}

// 内容组件
function Content() {
  return <div>This is the content</div>;
}

// 布局组件,通过组合 Header 和 Content 组件来创建一个完整的布局
function Layout() {
  return (
    <div>
      <Header />
      <Content />
    </div>
  );
}

// 使用布局组件
function App() {
  return (
    <div>
      <h1>App Component</h1>
      <Layout />
    </div>
  );
}

export default App;

展示通过组合创建一个包含头部和内容的简单布局组件。(从案例可知日常开发中基于页面写的组件也就是组合)

2、什么是自定义Hook

一种用于复用 React 组件逻辑的方式

1、自定义Hook规则:

  • 命名规则:自定义hook必须以"use"开头,当然是为了区分普通函数和自定义hook啦

  • 只在函数组件或其他自定义 Hook 中使用:不能在普通的 JavaScript 函数中使用

  • Hooks 的顺序和调用规则: 只能在顶层调用 Hook,不能在条件语句、循环或嵌套函数中调用

是不是对只能在顶层调用 Hook,不能在条件语句、循环或嵌套函数中调用这句话没啥感觉?

上案例:

javaScript 复制代码
import React, { useState } from 'react';

function Counter() {
  let count;
  if (someCondition) {
    // 违反规则:在条件语句中调用 useState Hook
    [count, setCount] = useState(0);
  } else {
    [count, setCount] = useState(10);
  }

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increase Count</button>
    </div>
  );
}

2、自定义一个Hook:

最简单的案例,一看就会😌

javaScript 复制代码
import { useState } from 'react';

// 自定义 Hook,用于增加计数
function useIncrement(initialValue) {
  const [count, setCount] = useState(initialValue);

  // 增加计数
  function increment() {
    setCount(count + 1);
  }

  // 返回状态和操作函数
  return { count, increment };
}

// 使用自定义 Hook 的组件
function CounterComponent() {
  // 使用自定义 Hook 获取增加计数的方法
  const { count、increment }= useIncrement(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>Increment</button>
    </div>
  );
}

export default CounterComponent;
相关推荐
拼图20926 分钟前
Vue.js开发基础——数据绑定/响应式数据绑定
前端·javascript·vue.js
刘志辉31 分钟前
vue反向代理配置及宝塔配置
前端·javascript·vue.js
星叔1 小时前
ARXML汽车可扩展标记性语言规范讲解
java·前端·汽车
编程老船长1 小时前
第18章 从零开始:春节门联网页设计,用DIV+CSS打造传统与现代的完美融合
前端·css·html
sky.fly1 小时前
HTML5+css3(浮动,浮动的相关属性,float,解决浮动的塌陷问题,clear,overflow,给父亲盒子加高度,伪元素)
前端·css·html
Coisini_甜柚か1 小时前
打字机效果显示
前端·vue3·antv
郑小憨2 小时前
Node.js NPM以及REPL(交互式解释器) 使用介绍(基础介绍 二)
开发语言·前端·javascript·npm·node.js
嚣张农民2 小时前
在 WebSocket 连接中出现错误时,如何处理和捕获错误?
前端·javascript·面试
代码搬运媛2 小时前
前端开发利器:npm 软链接
前端·npm·node.js
周三有雨2 小时前
vue3 + vite 实现版本更新检查(检测到版本更新时提醒用户刷新页面)
前端·vue.js·typescript