首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义钩子-实现有状态钩子是正确的吗?

自定义钩子-实现有状态钩子是正确的吗?
EN

Stack Overflow用户
提问于 2021-10-12 12:56:08
回答 1查看 72关注 0票数 1

我正在重构我的应用程序的一些组件,为了使代码更简单和可重用,我决定将一些逻辑转移到钩子上。

例如:

代码语言:javascript
复制
export default function useMediaLibrary() {
  const isMounted = useIsMounted();

  const [images, setImages] = useState([]);

  const isFetching = useRef(false);
  const cursor = useRef(null);

  const fetchImages = async (limit = 60) => {
    if (isFetching.current) return;

    isFetching.current = true;

    const results = await MediaLibrary.getAssetsAsync({
      first: limit,
      after: cursor.current,
      sortBy: MediaLibrary.SortBy.creationTime,
      mediaType: [MediaLibrary.MediaType.photo],
    });

    if (!isMounted()) return;

    const { assets, hasNextPage, endCursor } = results;

    setImages(images.concat(assets));

    cursor.current = hasNextPage ? endCursor : null;

    isFetching.current = false;
  };

  const fetchNextImages = (limit = 60) => {
    // Necessary condition to avoid loops
    if (cursor.current) {
      fetchImages(limit);
    }
  };

  const createAsset = (uri) => MediaLibrary.createAssetAsync(uri);

  const requestPermissions = (writeOnly = false) =>
    MediaLibrary.requestPermissionsAsync(writeOnly);

  return {
    images,
    fetchFirstImages: fetchImages,
    fetchNextImages,
    createAsset,
    requestPermissions,
  };
}

你可以看到,这个钩子有点复杂..。它依赖于其他钩子并管理某些状态。

下面是我的问题:是管理自定义钩子内部状态的一个好做法,还是我们应该避免它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-12 13:52:10

是的,钩子用于提取包括状态在内的逻辑。请参阅这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69540954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档