React新出来的两个钩子函数是`useEffect`和`useContext`。
1. `useEffect`:`useEffect`可以在函数组件中执行副作用操作,比如订阅事件、网络请求、修改DOM等。它在组件渲染完成后执行,类似于`componentDidMount`、`componentDidUpdate`和`componentWillUnmount`的结合体。通过`useEffect`,我们可以告诉React在每次渲染后执行特定的操作,以及在组件被卸载前执行清理操作。
2. `useContext`:`useContext`用于在函数组件中访问React的上下文(context)。上下文可以在组件树中共享数据,使用`useContext`可以方便地获取和更新上下文中的数据,而不需要通过props一层层传递。它类似于`static contextType`和`this.context`的结合体。
区别:
- 新的钩子函数是基于函数组件的,而“will”系列的生命周期方法是基于类组件的。
- 新的钩子函数更加简洁和直观,不需要关注生命周期方法的命名和调用时机,更容易理解和使用。
- 新的钩子函数可以在函数组件中直接使用,不需要继承`React.Component`。
- 新的钩子函数可以多次使用,而“will”系列的生命周期方法只能在组件的生命周期中使用一次。
- 新的钩子函数可以解决类组件中的一些问题,比如处理副作用操作、共享上下文等。
需要注意的是,新的钩子函数并不完全取代了“will”系列的生命周期方法,它们是并行存在的。在现有的项目中,可以根据需要选择使用新的钩子函数或者保留使用生命周期方法。但在新项目中,推荐使用新的钩子函数来编写函数组件。