Issue
I'm learning TypeScript. I'm trying to set up useReducer
but I'm having a hard time doing it. The fix is probably fairly simple, so sorry for that. This is my App.tsx
:
import React, { useReducer } from "react";
import { StartPage } from "./components/StartPage";
import { QuestionsPage } from "./components/QuestionsPage";
type State = {};
type Action = {};
const initialState = {
hasStarted: false // one of the states I'm going to need
};
const reducer = (state: State, action: Action) => {};
export const App = () => {
const [state, dispatch] = useReducer(reducer, initialState); // * error here
return (
<>
<StartPage dispatch={dispatch}/>
<QuestionsPage />
</>
);
};
(Perhaps) good to know: I'm trying to set it up in a basic way first, but later I want to conditionally render either StartPage.tsx
or QuestionsPage.tsx
based on whether hasStarted
is true
or false
(which I'm going to set up in StartPage.tsx
.
I'm getting the following error here (see *
in code snippet above):
No overload matches this call. Overload 1 of 5, '(reducer: ReducerWithoutAction, initializerArg: any, initializer?: undefined): [any, DispatchWithoutAction]', gave the following error.
Argument of type '(state: State, action: Action) => void' is not assignable to parameter of type 'ReducerWithoutAction'.
Overload 2 of 5, '(reducer: (state: State, action: Action) => void, initialState: never, initializer?: undefined): [never, Dispatch]', gave the following error.
Argument of type '{}' is not assignable to parameter of type 'never'.
Solution
You are getting an error in Typescript because you are not returning any state inside the reducer function. This would do the fix:
const reducer = (state: State, action: Action) => {
//...logic for updating the state
return state;
};
Answered By - poal98
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.