凭据上一节的思路,每次从头渲染都要执行一遍这些副浸染函数,显然是不经济的。怎么跳过一些不须要的计较呢?我们只需要给useEffect传第二个参数即可。用第二个参数来汇报react只有当这个参数的值产生改变时,才执行我们传的副浸染函数(第一个参数)。
useEffect(() => { document.title = `You clicked ${count} times`; }, [count]); // 只有当count的值产生变革时,才会从头执行`document.title`这一句
当我们第二个参数传一个空数组[]时,其实就相当于只在首次渲染的时候执行。也就是componentDidMount加componentWillUnmount的模式。不外这种用法大概带来bug,罕用。
尚有哪些自带的Effect Hooks?
useContext
useReducer
useCallback
useMemo
useRef
useImperativeMethods
useMutationEffect
useLayoutEffect
怎么写自界说的Effect Hooks?
为什么要本身去写一个Effect Hooks? 这样我们才气把可以复用的逻辑抽离出来,酿成一个个可以随意插拔的“插销”,哪个组件要用来,我就插进哪个组件里
好比我们可以把上面写的FriendStatus组件中判定伴侣是否在线的成果抽出来,新建一个useFriendStatus的hook专门用来判定某个id是否在线。
import { useState, useEffect } from 'react'; function useFriendStatus(friendID) { const [isOnline, setIsOnline] = useState(null); function handleStatusChange(status) { setIsOnline(status.isOnline); } useEffect(() => { ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange); return () => { ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange); }; }); return isOnline; }
这时候FriendStatus组件就可以简写为:
function FriendStatus(props) { const isOnline = useFriendStatus(props.friend.id); if (isOnline === null) { return 'Loading...'; } return isOnline ? 'Online' : 'Offline'; }
如果这个时候我们又有一个伴侣列表也需要显示是否在线的信息:
function FriendListItem(props) { const isOnline = useFriendStatus(props.friend.id); return ( <li style={{ color: isOnline ? 'green' : 'black' }}> {props.friend.name} </li> ); }
这样就实现了组件复用。
taro hooks在 Taro 中利用 Hooks API 很简朴,Taro 的专有 Hooks(譬喻 usePageScroll, useReachBottom)从 @tarojs/taro 中引入,框架本身的 Hooks (譬喻 useEffect, useState)从对应的框架引入。
import { usePageScroll, useReachBottom } from '@tarojs/taro' // Taro 专有 Hooks import { useState, useEffect } from 'react' // 框架 Hooks (基本 Hooks)
到此这篇关于react hooks入门具体教程的文章就先容到这了,更多相关react hooks入门内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: