- Router传参-路由配置-懒加载-React Hooks使用
React Router 待补充,先学习更重要的 Hooks
为什么要使用 Hooks
函数式组件存在的缺陷
在不使用 Hooks 的前提下,函数式组件存在以下缺陷:
- 函数式组件不可以定义 state 来保存组件内部的状态,因为函数每次调用都会产生新的临时变量
- 函数式组件在重新 render 时,整个函数都会被重新执行
- 函数式组件没有生命周期的函数可使用
类组件存在的缺陷
复杂组件变得难以理解。随着业务增多,类组件变得越来越复杂
- 比如
componentDidMount中,可能就会包含大量的逻辑代码:包括网络请求、一些事件的监听。这种代码很难拆分难以理解的
class
this指向比较难搞清楚组件复用状态很难
- 之前学习的高阶组件就是组件复用的一种,但是比较难用
Hooks 的出现
它可以让我们在不编写
class的情况下使用state以及其他的 React 特性;
Hooks 可以解决类组件复杂度的问题,又为函数式组件带来了状态管理,生命周期等特性。这样既保留了函数式组件的简洁性,又能将类组件的特性增强到函数组件。
Hooks 的使用
使用
Hooks的两个规则:
- 只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。
- 只能在 React 的函数组件中调用 Hook。不要在其他 JavaScript 函数中调用。
useState
useState 的基本使用:
const [count, setCount] = useState(0);
count 就是当前的 state 变量,setCount是设置状态的函数。useState 传递的参数是初始值,如果没有指定就是 undefined。
通过上面案例可以更好地理解为什么会叫做 Hooks
Hook 就是 JavaScript 函数,这个函数可以帮助你 钩入(hook into) React State以及生命周期等特性;