Je suis en train de créer un hook réutilisable useReducer
avec des typings.
Voici mon code actuel :
type State = {
data?: T
isLoading: boolean
error?: string
}
type Action =
| { type: "request" }
| { type: "success"; results: T }
| { type: "failure"; error: string }
function reducer(state: State, action: Action): State {
switch (action.type) {
case "request":
return { isLoading: true }
case "success":
return { isLoading: false, data: action.results }
case "failure":
return { isLoading: false, error: action.error }
}
}
export function useFetchState() {
return useReducer(reducer, {isLoading: false});
}
Comme vous pouvez le voir, le hook devrait être utilisé pour contenir l'état de la requête mais les données doivent être dynamiques, de sorte qu'elles puissent être utilisées dans différents contextes :
const [videoFetch, dispatchVideo] = useFetchState()
const [userFetch, dispatchUser] = useFetchState()
Mon problème est que l'expression reducer
échoue en raison de Erreur:(26, 20) TS2345: Argument de type 'boolean' n'est pas assignable à un paramètre de type 'Reducer'., mais sans spécifier T
, le type de données est inconnu.
Je ne suis pas sûr de ce que cette situation est appelée dans le monde TypeScript, donc j'espère que quelqu'un peut m'expliquer si et comment je peux atteindre ce que je veux.
Je vous remercie beaucoup.