一、 介绍useEffect
在React中,useEffect是一个非常重要的Hook函数,用于处理组件的副作用操作。副作用操作包括但不限于数据获取、订阅事件、手动修改DOM等。使用useEffect可以让我们在函数组件中执行副作用操作,取代了class组件中的生命周期方法。
1.1 useEffect的基本用法
在函数组件中使用useEffect,可以通过传入一个回调函数来指定副作用操作,同时可以传入一个依赖数组,用来控制useEffect的执行时机。
```jsx
import React, { useEffect, useState } from 'react';
function Example() {
  useEffect(() => {
    // 执行副作用操作
  }, []);
  return (
    <div>Example</div>
  );
}
```
1.2 useEffect的执行时机
当组件渲染完成后,useEffect会在组件渲染到DOM树之后执行。如果指定了依赖数组,那么只有当依赖数组中的值发生变化时,useEffect才会重新执行。
1.3 useEffect的清除机制
在useEffect中我们也可以返回一个清除函数,用于清除副作用操作的影响,例如清除定时器
、取消订阅、卸载DOM事件等。
```jsx
useEffect(() => {
  // 执行副作用操作
  return () => {
    // 清除副作用操作
  };
}, []);
```
1.4 useEffect的注意事项
使用useEffect时需要注意一些常见问题,例如在useEffect中使用闭包导致的依赖项错误、在useEffect中执行同步/异步操作的规范等。
二、 函数作用域
在JavaScript中,函数作用域是指变量在哪个范围内可以被访问。在函数作用域中,变量有自己的作用域范围,可以避免变量污染和命名冲突。
2.1 函数作用域的基本概念
在JavaScript中,变量的作用域由它的声明位置决定。在函数内部声明的变量,只能在函数内部访问,外部无法访问,这就是函数作用域。
```javascript
function example() {
  var a = 1; // 只能在example函数内部访问
  console.log(a); // 输出1
react面试题hook是什么
}
console.log(a); // 报错,a未定义
```
2.2 全局作用域与局部作用域
在JavaScript中,全局作用域是指在全局范围内声明的变量可以被任何地方访问,而局部作用域是指在函数内部声明的变量只能在函数内部访问。
```javascript
var b = 2; // 全局作用域
function example() {
  var c = 3; // 局部作用域
  console.log(b); // 输出2
  console.log(c); // 输出3
}
console.log(c); // 报错,c未定义
```
2.3 作用域链
在JavaScript中,每个函数都有自己的作用域链,作用域链决定了变量的查顺序。当函数内部无法到变量时,会向上层作用域继续查,直至到为止。
```javascript
var d = 4;
function example() {
  var d = 5;
  function innerExample() {
    console.log(d); // 输出5
  }
  innerExample();
}
example();
```
2.4 闭包与作用域
闭包是指可以访问包含函数作用域的内部函数,内部函数可以访问外部函数的变量。闭包可以延长变量的生命周期,并且可以共享外部函数的作用域。
```javascript
function outer() {
  var e = 6;
  function inner() {
    console.log(e); // 输出6

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。