深入React Hoooks:从基础到自定义 Hooks

使用 useContext

useContext 是另一个常用的 Hook,它可让我们在函数组件中轻松访问 React 的 context。如果你的应用程序依赖于一些全局状态,或者你希望避免将 props 一层一层地传递到子组件,context 很有用。你可以在父组件设置一个值,然后在任何子组件中直接读取到它。

创建一个 context 对象很简单,使用 React.createContext() 并在需要访问它的组件中使用 useContext 即可。

import React, { useContext } from 'react';

// Create a context with a default value
const ThemeContext = React.createContext('light');

function Display() {
  // Use the context value (the closest provider up the tree)
  const theme = useContext(ThemeContext);
  
  return <div>{theme}</div>;
}

// This Component sets the value and includes Display as a child
function App() {
  return (
    <ThemeContext.Provider value='dark'>
      <Display />
    </ThemeContext.Provider>
  );
}

export default App;

在这个例子中,我们在 App 组件中定义了 context 的值为 'dark',然后在 Display 组件中直接读取到 'dark'。

自定义 Hooks

自定义 Hook 是一种复用代码的有效方式,能让我们将组件逻辑提取到可重用的函数中。自定义 Hook 是一个以 “use” 开头的函数,这个函数可以调用其他的 Hook。

比如,我们可以创建一个自定义 Hook 来处理表单的输入:

import { useState } from 'react';

function useInput(initialValue) {
  const [value, setValue] = useState(initialValue);
  
  function handleChange(e) {
    setValue(e.target.value);
  }
  
  return [value, handleChange];
}

我们的 useInput 同时返回了当前的值和一个处理改变的函数,其可以直接在表单输入中使用。例如:

function Signup() {
  const [name, handleName] = useInput('');
  const [email, handleEmail] = useInput('');
  
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(name, email);
  }

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" value={name} onChange={handleName} placeholder="Name" />
      <input type="text" value={email} onChange={handleEmail} placeholder="Email" />
      <button type="submit">Submit</button>
    </form>
  );
}

export default Signup;

我们的 Signup 组件使用 useInput 自定义 Hook 来处理 name 和 email 字段。提交表单时将打印出这两个字段的值。

总的来说,React Hooks 引入了一种优雅的方式来管理状态和副作用,既可以简化代码,又可以增强可读性。除了上述所述的 Hook 外,还有许多其他的 Hook,例如 useReduceruseMemo 和 useRef 等等,每个都具有自己的用途和唯一性。

相关推荐

  1. 深入React Hoooks基础定义 Hooks

    2024-06-07 18:34:02       25 阅读
  2. vue3精通入门22:定义 Hooks

    2024-06-07 18:34:02       37 阅读
  3. 深入理解Vue 3中的定义Hooks

    2024-06-07 18:34:02       146 阅读
  4. React定义Hook之useModel hook

    2024-06-07 18:34:02       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 18:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 18:34:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 18:34:02       82 阅读
  4. Python语言-面向对象

    2024-06-07 18:34:02       91 阅读

热门阅读

  1. vm-bhyve虚拟机安装ubuntu22版本后进入grub无法启动

    2024-06-07 18:34:02       32 阅读
  2. python姿态识别+Tensflow1.12+pyqt5+UI

    2024-06-07 18:34:02       22 阅读
  3. Chrome Plugin静态页面触发CSP如何解决CSP

    2024-06-07 18:34:02       28 阅读
  4. CSS样式优先级

    2024-06-07 18:34:02       29 阅读
  5. JVM由那些部分组成,运行流程是什么?

    2024-06-07 18:34:02       35 阅读
  6. 10分钟Apache Kylin快速入门

    2024-06-07 18:34:02       30 阅读
  7. AIGC笔记--Stable Diffusion源码剖析之UNetModel

    2024-06-07 18:34:02       21 阅读
  8. Docker面试整理-Docker的核心组件是什么?

    2024-06-07 18:34:02       31 阅读