You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
对比 Class Component 中将组件状态放在 state 属性中维持的做法,React Hook 使用 useState 方法来在 Function Component 中创建状态变量、创建改变状态的方法、传入初始状态。这样就实现了一个拥有自己的状态的 Function Component。显而易见,无论是简洁程度还是优雅程度,Function Component 都要远远优于 Class Component。
useEffect(()=>{functionhandleStatusChange(status){setIsOnline(status.isOnline);}ChatAPI.subscribeToFriendStatus(props.friend.id,handleStatusChange);// Specify how to clean up after this effect:returnfunctioncleanup(){ChatAPI.unsubscribeFromFriendStatus(props.friend.id,handleStatusChange);};});
什么是 Hooks
动机:
React Hooks 的设计目的,就是加强版函数组件,完全不使用"类",就能写出一个全功能的组件。
React Hooks 的意思是,组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码"钩"进来。 React Hooks 就是那些钩子。
常用钩子:
对比 Class Component 中将组件状态放在 state 属性中维持的做法,React Hook 使用 useState 方法来在 Function Component 中创建状态变量、创建改变状态的方法、传入初始状态。这样就实现了一个拥有自己的状态的 Function Component。显而易见,无论是简洁程度还是优雅程度,Function Component 都要远远优于 Class Component。
useEffect是用来处理组件状态变化引起的副作用的,而副作用的含义是:和真实世界进行交互的作用,都是副作用,包括页面跳转、Ajax 请求、DOM 操作等等。
在传统的 Class Component 中,副作用是在 componentDidMount 和 componentDidUpdate 两个生命周期中结合处理的。因为初次渲染,并不会执行 componentDidUpdate,而更新的时候,又需要通过 componentDidUpdate 更新。
在 useEffect 结合了这两个生命周期,其含义是:无论组件状态是第 1 次更新还是第 n 次更新,其中的回调函数都会被调用。
React 何时清除 effect?React 会在组件卸载的时候执行清除操作。
由于添加和删除订阅的代码的紧密性,所以 useEffect 的设计是在同一个地方执行。如果你的 effect 返回一个函数,React 将会在执行清除操作时调用它:
学习资料:
The text was updated successfully, but these errors were encountered: