用初学者的视角来探索 React Hooks 的必备知识和常见坑
2023-12-06 02:21:48
作为一名刚工作的校招萌新,一个 00 后,一个常年用 Vue2 的,一个 Vue3 萌新,一个 React 小白。本文将从一个初学者的角度,介绍使用 React Hooks 必备的知识点和常见的“坑”。
函数式组件
函数式组件是 React Hooks 的基础,它是一种通过函数来定义的组件。函数式组件不包含任何状态,也不包含任何生命周期方法。因此,函数式组件的代码通常很简洁,易于理解和维护。
const MyComponent = () => {
return <div>Hello world!</div>;
};
状态管理
状态是 React 组件中存储的数据,它可以随着时间的推移而变化。状态管理是 React 中一个重要的概念,它决定了组件如何响应用户的交互和数据的变化。
React Hooks 提供了多种状态管理方法,最常用的两个是 useState
和 useContext
。
useState
用于管理组件内部的状态,它接受一个初始值,并返回一个数组,数组的第一个元素是当前状态,数组的第二个元素是一个函数,用于更新状态。
const [count, setCount] = useState(0);
useContext
用于管理组件外部的状态,它接受一个 Context
对象,并返回该 Context
对象的当前值。
const count = useContext(CountContext);
useEffect
useEffect
钩子用于在组件挂载、更新和卸载时执行某些副作用。副作用是指那些不属于组件渲染过程的代码,比如对 DOM 的操作、网络请求等。
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);
useState
useState
钩子用于管理组件内部的状态,它接受一个初始值,并返回一个数组,数组的第一个元素是当前状态,数组的第二个元素是一个函数,用于更新状态。
const [count, setCount] = useState(0);
useContext
useContext
钩子用于管理组件外部的状态,它接受一个 Context
对象,并返回该 Context
对象的当前值。
const count = useContext(CountContext);
useRef
useRef
钩子用于创建可变的引用对象,它接受一个初始值,并返回一个对象,对象的 current
属性指向当前值。
const ref = useRef(null);
useCallback
useCallback
钩子用于创建缓存的回调函数,它接受一个函数和一个依赖项数组,并返回一个缓存的回调函数,该回调函数只会在依赖项发生变化时更新。
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
useMemo
useMemo
钩子用于创建缓存的计算结果,它接受一个函数和一个依赖项数组,并返回该函数的计算结果,该计算结果只会在依赖项发生变化时更新。
const memoizedValue = useMemo(() => {
return computeExpensiveValue(props);
}, [props]);
常见的“坑”
在使用 React Hooks 时,需要注意一些常见的“坑”。
- 不要在
useEffect
中更新状态 。这会导致无限循环,因为useEffect
会在状态更新后重新运行。 - 不要在函数式组件中使用生命周期方法 。函数式组件没有生命周期方法,因此无法使用
componentDidMount
、componentDidUpdate
和componentWillUnmount
等方法。 - **不要在函数式组件中使用
this
** 。函数式组件没有this
关键字,因此无法使用this.props
和this.state
等属性。
结语
React Hooks 是 React 中一个强大的特性,它可以帮助你编写出更简洁、易于理解和维护的代码。但是,在使用 React Hooks 时,需要注意一些常见的“坑”。希望这篇文章能够帮助你快速上手 React Hooks,并避免常见错误。