- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 api,它为我提供了如下方法:
我正在实现一个钩子(Hook)“useFetchUsers”,它将提供一个接口(interface)来访问这些方法。
这是我当前的代码:
import { useState, useEffect } from "react";
import {
searchUsersByUsername,
getRandomPremiumUsers,
getRandomYoungUsers,
} from "../../services/firebase/api/users/search"
import { MAX_SEARCH_USERS_BY_USERNAME_TO_RETRIEVE } from "../../utils/search";
export const QUERIES = {
"SEARCH_USERS_BY_USERNAME": searchUsersByUsername,
"FETCH_RANDOM_PREMIUM_USERS": getRandomPremiumUsers,
"FETCH_RANDOM_YOUNG_USERS": getRandomYoungUsers,
};
const defaultOptions = {
query: QUERIES[0],
username: "", // optional
limit = MAX_SEARCH_USERS_BY_USERNAME_TO_RETRIEVE, // optional
};
export default function useFetchUsers(options = defaultOptions, deps) {
const [users, setUsers] = useState([]);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(undefined);
const getUsers = async () => {
setIsLoading(true);
try {
const users = await options.query();
setUsers(users);
} catch(err) {
setError(err);
}
setIsLoading(false);
}
useEffect(getUsers, deps);
return {
users,
isLoading,
error,
getUsers
}
}
我面临的主要问题是,我不知道如何使这个“接口(interface)”更加灵活,以便能够将参数传递给我的 QUERY 方法。
此外,我的 defaultOptions 对象不需要“getRandomPremiumUsers”和“getRandomYoungUsers”方法的“用户名”字段。
关于如何在类似的抽象之后满足要求有什么想法吗?
最佳答案
export default function useFetchUsers() {
const initialState = {
payload: null,
error: null,
inFlight: false,
};
const [result, setResult] = useState(initialState);
const searchUsersByUsername = () => {
setResult({ payload: null, error: null, inFlight: true });
try {
const payload = fetch("api");
setResult({ payload, error: null, inFlight: false });
} catch (error) {
setResult({ payload: null, error: null, inFlight: false });
}
};
return {
...result,
searchUsersByUsername,
};
}
const api = {
user: {
searchUsersByUsername: (option) => {
return fetch(option);
},
getRandomPremiumUsers: (option) => {
return fetch(option);
},
getYoungUsers: (option) => {
return fetch(option);
},
},
};
export default function useFetchUsers() {
const initialState = {
payload: null,
error: null,
inFlight: false,
};
const [result, setResult] = useState(initialState);
const updateState = (fetcher, option) => {
setResult({ payload: null, error: null, inFlight: true });
try {
const payload = fetcher(option);
setResult({ payload, error: null, inFlight: false });
} catch (error) {
setResult({ payload: null, error: null, inFlight: false });
}
};
return {
...result,
updateState,
};
}
function App() {
const { updateState, payload } = useFetchUsers();
return (
<div
onclick={() =>
updateState(api.user.searchUsersByUsername, { username: 'name', limit: 10 })
}
>
searchUsersByUsername
</div>
);
}
因此,根据您的用例,您可以在 API 层本身实现缓存或使用上下文 API 扩展它
关于javascript - React Hooks - useFetch 泛化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69644328/
React 的半新内容。我有一个 useFetch Hook ,它具有所有的获取功能,我想在用户单击“加载更多项目”按钮时调用它来获取下一页的项目。 显然, { useFetch(...) }}>l
我有一个 api,它为我提供了如下方法: 按用户名搜索用户(用户名,限制) getRandomPremiumUsers(限制) getYoungUsers(maxAge, 限制) 我正在实现一个钩子(
我是 nuxt3 的新手,我不了解 useFetch 中 key 选项的作用(使用)可组合 它说; /* key: a unique key to ensure that data fetching
我有很多 React 经验,但我是 Hooks 的新手。 我有以下 useFetch Hook ,我在此 useAsync 之后修改了它钩子(Hook): import { useState, use
我已经实现了一个自定义 useFetch Hook ,因此可以在我的应用程序中进行提取: import { useEffect, useState } from 'react' const useFe
我只是不知道如何处理这里的错误: const { error, data } = useFetch('https://example.app/api/contact', { method: "P
我只是不知道如何处理这里的错误: const { error, data } = useFetch('https://example.app/api/contact', { method: "P
当我在NUXT环境中运行此代码时:。它提供了以下结果:。当我将SSR:FALSE添加到nuxt-config文件时,它已经被解析了。我对此感到困惑。
我刚开始学习 nuxtjs(对 vue.js 有一些经验),我遇到了以下问题: 我有一个简单的 todo-[id].vue 页面。它应该从 API 获取待办事项并呈现在页面上: import Sec
我刚开始学习 nuxtjs(对 vue.js 有一些经验),我遇到了以下问题: 我有一个简单的 todo-[id].vue 页面。它应该从 API 获取待办事项并呈现在页面上: import Sec
我构建了一个 useFetch 函数,该函数与此密切相关:https://www.robinwieruch.de/react-hooks-fetch-data这是它的简化版本:How to corre
我已经从 nuxt 3 官方文档中设置了 nuxt 3,并使用唯一的 useFetch() 可组合项来获取 app.vue 文件中的数据,但它返回错误 Error: fetch failed()当我们
编辑:我使用的是Nuxt 3.7.1版。我有一个Nuxt网站。我有一个服务器端点来获取内容。当页面第一次加载时,会显示当前数据。如果我刷新页面,则不会调用useFetch(基于网络日志),并显示旧数据
我是一名优秀的程序员,十分优秀!