Let's build this counter application using react-typescript.We are going to use useReducer
hook for this application.
Let's set up our application
$ cd Desktop
$ mkdir react-counter
$ cd react-counter
Now create a react app
$ npx create-react-app ./ --template typescript
You should see a brand new react application.Clean up all unnecessary files.You can use a different component but in my case i am going to use App.tsx component.
At first create a component App and export it defaultly
const App:React.FunctionComponent=()=>{
return <div className='container'></div>
}
Now we are going to setup our useReducer hooks.Add this statement to your code
const [state, dispatch] = React.useReducer(counterReducer, initialState);
Now let's create our cunterReducer and initialState
First initialState..
const initialState = {
count: 0,
};
And then counterReducer
type ActionsType = {
type: string;
payload?: number;
};
const counterReducer = (
state: typeof initialState,
action: ActionsType
): State => {
};
Now let's add some actionTypes and actionCreators
ActionTypes..
const INCREMENT = "INCREMENT";
const DECREMENT = "DECREMENT";
const RESET = "RESET";
and actionCreators..
const increment = (value: number) => {
return {
type: INCREMENT,
payload: value,
};
};
const decrement = (value: number) => {
return {
type: DECREMENT,
payload: value,
};
};
const reset = () => {
return {
type: RESET,
};
};
Yeah i am using redux pattern.Now let's add some logic to our reducer.
switch (action.type) {
case INCREMENT:
return { ...state, count: state.count + Number(action.payload) };
case DECREMENT:
return { ...state, count: state.count -Number(action.payload) };
case RESET:
return { ...state, count: 0 };
default:
return state;
}
Now let's add some jsx to our application
<div className="container">
<p>{state.count}</p>
<div className="wrapper">
<button onClick={() => dispatch(increment(2))}>increment</button>
<button onClick={() => dispatch(decrement(2))}>decrement</button>
<button onClick={() => dispatch(reset())}>reset</button>
</div>
<div>
If you want those styles you can add these css code in index.css
file
p {
font-size: 2rem;
font-weight: 600;
}
button {
background: #004567;
color: white;
border: none;
border-radius: 3px;
padding: 20px;
margin: 10px;
font-size: 1.2rem;
text-transform: capitalize;
}
.container {
width: 500px;
margin: 100px auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
If you start your application you should see something on the screen a simple counter application working.
Now add a input element to add numbers randomly..
<input type="number" name="count" value={value} onChange={handleChange}/><button onClick={() = dispatch(increment(value as number))}>
add
</button>
Now where do i get those value={value}
and onChnage={handleChange}
for that add following code at top of your component
const [value, setValue] = React.useState<number>();
and change handler handleChange
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValue(Number(e.target.value));
};
you should keep all hooks at the top then functions
Now add these css code for your input element
input {
padding: 10px;
width: 300px;
}
Now if you got to your browser and refresh if it is needed,you should see same counter application as i have shown you at the top.Try to click buttons and check if it is working.
Thank you for being with me so long.See you.Bye!
Top comments (0)