DEV Community

Cover image for Building Your First React Component with TypeScript
Baransel
Baransel

Posted on • Originally published at baransel.dev

Building Your First React Component with TypeScript

React and TypeScript together offer a powerful combination for building robust web applications. This post will guide you through creating your first React component with TypeScript, ensuring type safety and enhancing developer productivity.

Setting Up Your Environment

Before diving into component creation, ensure your environment is set up for React and TypeScript:

npx create-react-app my-app --template typescript
cd my-app
npm start
Enter fullscreen mode Exit fullscreen mode

Creating a Typed React Component

Let's create a simple Greeting component that accepts a name prop:

import React from 'react';

type GreetingProps = {
  name: string;
};

const Greeting: React.FC<GreetingProps> = ({ name }) => (
  <div>Hello, {name}!</div>
);

export default Greeting;
Enter fullscreen mode Exit fullscreen mode

Understanding Props and State with Types

TypeScript makes managing props and state straightforward. Here's an example of a component with typed state:

import React, { useState } from 'react';

const Counter: React.FC = () => {
  const [count, setCount] = useState<number>(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
};

export default Counter;
Enter fullscreen mode Exit fullscreen mode

Practical Example: A Todo List Component

Now, let's apply what we've learned to build a Todo List component:

import React, { useState } from 'react';

type Todo = {
  id: number;
  text: string;
};

const TodoList: React.FC = () => {
  const [todos, setTodos] = useState<Todo[]>([]);
  const [input, setInput] = useState('');

  const addTodo = () => {
    setTodos([...todos, { id: todos.length, text: input }]);
    setInput('');
  };

  return (
    <div>
      <input value={input} onChange={e => setInput(e.target.value)} />
      <button onClick={addTodo}>Add Todo</button>
      <ul>
        {todos.map(todo => (
          <li key={todo.id}>{todo.text}</li>
        ))}
      </ul>
    </div>
  );
};

export default TodoList;
Enter fullscreen mode Exit fullscreen mode

You've now stepped into the world of typed React components with TypeScript. By integrating TypeScript into your React projects, you'll enjoy a more structured development process, easier debugging, and improved code quality. Keep experimenting with different component structures and TypeScript features to deepen your understanding.

Top comments (1)

Collapse
 
fpaghar profile image
Fatemeh Paghar

One of the unspoken benefits of combining React with TypeScript is the enhancement of collaboration within development teams. TypeScript's static typing enforces a clear contract between components, making it easier for team members to understand and use each other's code. The explicit definition of props, state, and their types fosters better communication among developers, reducing the likelihood of integration issues. This optimized collaboration is especially valuable in larger projects where multiple team members are simultaneously working on different parts of the application.