ReactJS

Here's a detailed section for my React.js skills covering its features, usecase, and example code snippets.

Overview: React.js is a popular JavaScript library for building user interfaces, particularly single-page applications, with a component-based architecture. It enables efficient updates and rendering of user interfaces through its virtual DOM.

Key Features and Skills:

  • Component-Based Architecture: Created reusable and modular components to build dynamic and maintainable user interfaces.

    import React from 'react';
    
    const Greeting = ({ name }) => (
      <div>
        <h1>Hello, {name}!</h1>
      </div>
    );
    
    export default Greeting;
  • State Management: Managed local component state using React’s useState hook and global state with context or third-party libraries like Redux.

    import React, { useState } from 'react';
    
    const Counter = () => {
      const [count, setCount] = useState(0);
    
      return (
        <div>
          <p>You clicked {count} times</p>
          <button onClick={() => setCount(count + 1)}>Click me</button>
        </div>
      );
    };
    
    export default Counter;
  • Lifecycle Methods and Hooks: Utilized React lifecycle methods (componentDidMount, componentDidUpdate) and hooks (useEffect, useMemo) to handle side effects and optimize performance.

    import React, { useEffect, useState } from 'react';
    
    const DataFetcher = () => {
      const [data, setData] = useState(null);
    
      useEffect(() => {
        fetch('https://api.example.com/data')
          .then(response => response.json())
          .then(data => setData(data));
      }, []); // Empty dependency array means this effect runs once on mount
    
      return (
        <div>
          {data ? <pre>{JSON.stringify(data, null, 2)}</pre> : <p>Loading...</p>}
        </div>
      );
    };
    
    export default DataFetcher;
  • Context API: Implemented Context API for managing global state and avoiding prop drilling.

    import React, { createContext, useState, useContext } from 'react';
    
    const ThemeContext = createContext();
    
    const ThemeProvider = ({ children }) => {
      const [theme, setTheme] = useState('light');
      return (
        <ThemeContext.Provider value={{ theme, setTheme }}>
          {children}
        </ThemeContext.Provider>
      );
    };
    
    const ThemedComponent = () => {
      const { theme, setTheme } = useContext(ThemeContext);
      return (
        <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>
          <p>The current theme is {theme}</p>
          <button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>Toggle Theme</button>
        </div>
      );
    };
    
    export { ThemeProvider, ThemedComponent };
  • React Router: Used React Router for handling routing and navigation within single-page applications.

    import React from 'react';
    import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
    
    const Home = () => <h2>Home Page</h2>;
    const About = () => <h2>About Page</h2>;
    
    const App = () => (
      <Router>
        <nav>
          <Link to="/">Home</Link>
          <Link to="/about">About</Link>
        </nav>
        <Switch>
          <Route path="/" exact component={Home} />
          <Route path="/about" component={About} />
        </Switch>
      </Router>
    );
    
    export default App;
  • Form Handling: Managed form state and validation using React’s controlled components and libraries like Formik or React Hook Form.

    import React, { useState } from 'react';
    
    const ContactForm = () => {
      const [form, setForm] = useState({ name: '', email: '' });
    
      const handleChange = (e) => {
        const { name, value } = e.target;
        setForm({ ...form, [name]: value });
      };
    
      const handleSubmit = (e) => {
        e.preventDefault();
        console.log('Form Submitted:', form);
      };
    
      return (
        <form onSubmit={handleSubmit}>
          <label>
            Name:
            <input type="text" name="name" value={form.name} onChange={handleChange} />
          </label>
          <label>
            Email:
            <input type="email" name="email" value={form.email} onChange={handleChange} />
          </label>
          <button type="submit">Submit</button>
        </form>
      );
    };
    
    export default ContactForm;
  • Performance Optimization: Applied performance optimization techniques like lazy loading, code splitting, and memoization to enhance application speed.

    import React, { Suspense, lazy } from 'react';
    
    const LazyComponent = lazy(() => import('./LazyComponent'));
    
    const App = () => (
      <Suspense fallback={<div>Loading...</div>}>
        <LazyComponent />
      </Suspense>
    );
    
    export default App;
  • Testing: Performed testing of components and hooks using tools like Jest and React Testing Library to ensure reliability and functionality.

    import { render, screen, fireEvent } from '@testing-library/react';
    import '@testing-library/jest-dom';
    import Counter from './Counter';
    
    test('increments counter on button click', () => {
      render(<Counter />);
      fireEvent.click(screen.getByText(/Click me/i));
      expect(screen.getByText(/You clicked 1 times/i)).toBeInTheDocument();
    });

Last updated