javascript - 如何使用 React 自定义钩子(Hook)重用 api 的数据获取逻辑

标签 javascript reactjs react-hooks

我有两个组件根据用户类型呈现不同的 UI。两个组件从 api 获取数据、连接到存储的逻辑有近 50% 相似。

我尝试过,通过创建自定义 Hook 来重用登录名。

const { products, loading} = useFetchProducts(userId);

现在我可以定义一个 useFetchProducts reducer

  const useFetchProducts= (userId) => {
   const [ loading, setLoading ] = useState(false);
   const [ products, setProducts ] = useState(null);

   useEffect(() => {
       setLoading(true);
         fetchUserProducts(userId).then((res) => {
           setLoading(false);
           setProducts(res.data);  
     }); 
   }, [])
 }

如何从该 reducer 将产品和加载状态返回到我的组件,以隐藏或显示加载程序以及显示产品列表,

最佳答案

您只需从自定义 Hook 返回值即可。

const useFetchProducts= (userId) => {
   const [ loading, setLoading ] = useState(false);
   const [ products, setProducts ] = useState(null);

   useEffect(() => {
       setLoading(true);
         fetchUserProducts(userId).then((res) => {
           setLoading(false);
           setProducts(res.data);  
     }); 
   }, [])
   return {loading, products}
 }

它会起作用,因为当数据可用时,它将导致重新渲染,因此,您使用自定义 Hook 的组件将重新渲染,从而导致更新

关于javascript - 如何使用 React 自定义钩子(Hook)重用 api 的数据获取逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56559493/

相关文章:

javascript - Typescript 错误和展开运算符是由 ...props 引起的?

reactjs - 如何在 React JS 中处理具有不同路由的组件

reactjs - React Native 在 Nested StackNavigator 之间导航

javascript - 带钩子(Hook)的 React 函数组件与类组件

reactjs - 在 React 中使用 Hooks 停止/防止滚动到顶部重新渲染(需要实现无限滚动)

javascript - 使用 AJAX 和 FORM 自动刷新 DIV,按下按钮后有间隔

javascript - 动画进度元素值

javascript - 单页/模态打开类上的模态 Bootstrap/多模态

javascript - (是的)如何使用单个 .test() 函数创建多个错误

react-native - 如何使用 useState Hook 来处理来自 React Native 中 FlatList 的多个动态文本输入?