首页 > 其他分享 >[React Typescript] Discriminated Tuples in Custom Hooks

[React Typescript] Discriminated Tuples in Custom Hooks

时间:2023-08-17 15:22:51浏览次数:35  
标签:status Typescript return url Hooks Custom loading error const

import { useEffect, useState } from "react";

export type Result<T> =
  | ["loading", undefined?]
  | ["error", Error]
  | ["success", T];

export const useData = <T,>(url: string): Result<T> => {
  const [result, setResult] = useState<Result<T>>(["loading", undefined]);

  useEffect(() => {
    fetch(url)
      .then((response) => response.json())
      .then((data) => setResult(["success", data]))
      .catch((error) => setResult(["error", error]));
  }, [url]);

  return result;
};

const Component = () => {
  const [status, value] = useData<{ title: string }>(
    "https://jsonplaceholder.typicode.com/todos/1"
  );

  if (status === "loading") {
    return <div>Loading...</div>;
  }

  if (status === "error") {
    return <div>Error: {value.message}</div>;
  }

  return <div>{value.title}</div>;
};

 

标签:status,Typescript,return,url,Hooks,Custom,loading,error,const
From: https://www.cnblogs.com/Answer1215/p/17637670.html

相关文章

  • 一个 git 仓库下拥有多个项目的 git hooks 配置方案
    前言通常情况下,一个git仓库就是一个项目,只需要配置一套githooks脚本就可以执行各种校验任务。对于monorepo项目也是如此,monorepo项目下的多个packages之间,它们是有关联的,可以互相引用,所以当成一个项目也没问题。但是也有一种情况,一个git仓库下的多个项目之间是彼此......
  • typeScript学习-类、静态数据、静态属性应用
    typeScript学习类、静态数据、静态属性应用类:定义:类就是拥有相同属性和方法的一系列对象的集合。展开理解:类是一个模具,是从这该类包含的所有具体对象中抽象出来的一个概念,类定义了它包含的全体对象的静态特征和动态特征。举例:people类静态特征【属性】name、age、address......
  • typeScript学习-TS类型-其他特殊类型-可变元组
    typeScript学习可变元组:letpeople:[string,number,string,string,string]=["wangwu",23,"地址",'13312341234','备注']//当前三个数据固定格式,后面数据不确认格式时用可变元组//可变元组//letcustomers:[string,number,string,...any[]]=[&qu......
  • typeScript学习-TS类型-其他特殊类型-元组(tuple)
    typeScript学习元组(tuple):满足以下3点的数组就是元组(1)在定义时每个元素的类型都是确定(2)元素值的数据类型必须是当前元素定义的类型(3)元素值的个数必须和定义时个数相同 letsalary:[string,number,number,number,number]=["zhangsan",5000,5000,5000,5000] ......
  • [React Typescript] Well typed a React Context provider
    importReactfrom"react";import{Equal,Expect}from"../helpers/type-utils";constcreateRequiredContext=<Textendsany>()=>{constcontext=React.createContext<T|null>(null);constuseContext=<Te......
  • [React Typescript] Fixing type inference in a Custom React Hook
    //Problemimport{useState}from"react";import{Equal,Expect}from"../helpers/type-utils";exportconstuseId=(defaultId:string)=>{const[id,setId]=useState(defaultId);return[id,setId];};const[id,setI......
  • typeScript学习-interface和type 区别
    typeScript学习interface(接口)和type区别type和接口类似,都用来定义类型,但type和interface区别如下:区别1:定义类型范围不同interface只能定义对象类型或接口当名字的函数类型。type可以定义任何类型,包括基础类型、联合类型、交叉类型,元组。//type定义基础类型typ......
  • NetSuite: Get specific Custom Record Types and related sub Custom Fields
    背景以前当使用search.create({})来获取数据时,我们需要制定特定的数据返回列;例如:search.createColumn(options)而query可以使用SELECT*FROM来动态返回所有的数据列(这在有的时候是一个优点),那么如何让search也动态返回所有的数据列呢?vararrColFlds=query.runSuiteQL({......
  • 前端周刊第66期:TypeScript教程、ESM、React泡沫、htmx、测试文章
    周刊同步发表于微信公众号“写代码的宝哥”,欢迎各位小伙伴前来关注......
  • vue3+typescript中的props
     以上是子组件 以上是父组件<scriptsetuplangs="ts">letprops=defineProps(['info','money'])//父子组件的通信需要用到defineProps方法去接受父组件想要传递的数据console.info(props)</script>需要注意的就是:props可以实现父子组件的通信,但是props的......