一套高质量可靠的 React Hooks 库:ahooks官方文档
问题描述
const fetchData = async () => {
try {
// 调接口
const proRes = await getProjectConfig();
// ...
} catch (err) {
console.log('err:', err);
}
};
useEffect(() => {
if (projectName) {
fetchData();
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [projectName]);
当projectName
发生变化的时候,需要执行fetchData()
调用后端接口获取列表数据,effect
依赖性不写全[projectName,fetchData()]
的话,就会报一个eslint的错误。
解决方法
import { useMemoizedFn } from 'ahooks'; // 关键点
const fetchData = useMemoizedFn(async () => { // 关键点
try {
// 调接口
const proRes = await getProjectConfig();
// ...
} catch (err) {
console.log('err:', err);
}
});
useEffect(() => {
if (projectName) {
fetchData();
}
}, [fetchData, projectName]); // 关键点
使用 ahooks 钩子useMemoizedF。
其它还常用的还有useMount
,即只在组件初始化时执行的 Hook;useThrottleFn
,用来处理函数节流的 Hook;useRequest
,处理异步数据等。