DEV Community

Javascript Developer
Javascript Developer

Posted on

50 Most Useful React Snippets

1. Functional Component (Basic)

import React from 'react';

const MyComponent = () => {
  return <h2>Hello, World!</h2>;
};

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

2. Functional Component with Props

import React from 'react';

const Greeting = ({ name }) => <h1>Hello, {name}!</h1>;

export default Greeting;
Enter fullscreen mode Exit fullscreen mode

3. Class Component

import React, { Component } from 'react';

class MyClassComponent extends Component {
  render() {
    return <p>Hello from Class Component</p>;
  }
}

export default MyClassComponent;
Enter fullscreen mode Exit fullscreen mode

II. State Management with Hooks

4. useState for Counter

import React, { useState } from 'react';

const Counter = () => {
  const [count, setCount] = useState(0);
  return (
    <>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </>
  );
};

export default Counter;
Enter fullscreen mode Exit fullscreen mode

5. useState with Object

import React, { useState } from 'react';

const Profile = () => {
  const [user, setUser] = useState({ name: 'John', age: 25 });
  return (
    <>
      <p>{user.name} - {user.age}</p>
      <button onClick={() => setUser({ ...user, age: user.age + 1 })}>
        Aging...
      </button>
    </>
  );
};

export default Profile;
Enter fullscreen mode Exit fullscreen mode

6. useEffect on Mount

import React, { useEffect } from 'react';

const Hello = () => {
  useEffect(() => {
    console.log('Mounted!');
  }, []);

  return <p>Hello Effect</p>;
};

export default Hello;
Enter fullscreen mode Exit fullscreen mode

7. useEffect with Fetch

import React, { useEffect, useState } from 'react';

const FetchUser = ({ id }) => {
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
      .then(res => res.json())
      .then(setUser);
  }, [id]);

  if (!user) return <p>Loading...</p>;
  return <p>{user.name}</p>;
};

export default FetchUser;
Enter fullscreen mode Exit fullscreen mode

8. useContext for Theme

import React, { createContext, useContext, useState } from 'react';

const ThemeContext = createContext();

export const ThemeProvider = ({ children }) => {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

export const ThemeButton = () => {
  const { theme, setTheme } = useContext(ThemeContext);
  return (
    <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
      Theme: {theme}
    </button>
  );
};
Enter fullscreen mode Exit fullscreen mode

9. useRef Focus Input

import React, { useRef } from 'react';

const FocusInput = () => {
  const inputRef = useRef();
  return (
    <>
      <input ref={inputRef} />
      <button onClick={() => inputRef.current.focus()}>Focus</button>
    </>
  );
};

export default FocusInput;
Enter fullscreen mode Exit fullscreen mode

10. useCallback

import React, { useState, useCallback } from 'react';

const Button = React.memo(({ onClick }) => <button onClick={onClick}>+</button>);

const App = () => {
  const [count, setCount] = useState(0);
  const inc = useCallback(() => setCount(c => c + 1), []);
  return <><p>{count}</p><Button onClick={inc} /></>;
};

export default App;
Enter fullscreen mode Exit fullscreen mode

11. useMemo

import React, { useState, useMemo } from 'react';

const Expensive = ({ n }) => {
  const result = useMemo(() => {
    let res = 0;
    for (let i = 0; i < n * 100000; i++) res += i;
    return res;
  }, [n]);

  return <p>{result}</p>;
};

export default Expensive;
Enter fullscreen mode Exit fullscreen mode

12. useReducer

import React, { useReducer } from 'react';

const reducer = (state, action) => {
  switch (action.type) {
    case 'inc': return { count: state.count + 1 };
    case 'dec': return { count: state.count - 1 };
    default: return state;
  }
};

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  return (
    <>
      <p>{state.count}</p>
      <button onClick={() => dispatch({ type: 'inc' })}>+</button>
      <button onClick={() => dispatch({ type: 'dec' })}>-</button>
    </>
  );
};

export default Counter;
Enter fullscreen mode Exit fullscreen mode

III. Conditional Rendering

13. With &&

{isLoggedIn && <p>Welcome!</p>}
Enter fullscreen mode Exit fullscreen mode

14. With Ternary

{isAdmin ? <p>Admin Panel</p> : <p>User Panel</p>}
Enter fullscreen mode Exit fullscreen mode

15. With Switch-like Logic

const Status = ({ code }) => {
  switch (code) {
    case 200: return <p>Success</p>;
    case 400: return <p>Error</p>;
    default: return <p>Unknown</p>;
  }
};
Enter fullscreen mode Exit fullscreen mode

IV. List Rendering

16. Map Over Array

<ul>
  {items.map(i => <li key={i.id}>{i.name}</li>)}
</ul>
Enter fullscreen mode Exit fullscreen mode

17. Nested Lists

{data.map(cat => (
  <div key={cat.id}>
    <h3>{cat.name}</h3>
    <ul>
      {cat.items.map(it => <li key={it}>{it}</li>)}
    </ul>
  </div>
))}
Enter fullscreen mode Exit fullscreen mode

V. Event Handling

18. onClick Handler

<button onClick={() => alert('Clicked!')}>Click</button>
Enter fullscreen mode Exit fullscreen mode

19. Input Change

<input value={text} onChange={e => setText(e.target.value)} />
Enter fullscreen mode Exit fullscreen mode

20. Prevent Form Submit

<form onSubmit={e => { e.preventDefault(); save(); }}>
  <button>Save</button>
</form>
Enter fullscreen mode Exit fullscreen mode

VI. Forms

21. Controlled Input

<input value={value} onChange={e => setValue(e.target.value)} />
Enter fullscreen mode Exit fullscreen mode

22. Multiple Inputs

<input name="username" onChange={e => setForm({...form, [e.target.name]: e.target.value})} />
Enter fullscreen mode Exit fullscreen mode

23. Checkbox Group

<input type="checkbox" checked={checked} onChange={e => setChecked(e.target.checked)} />
Enter fullscreen mode Exit fullscreen mode

24. Form Reset

<button onClick={() => setForm(initial)}>Reset</button>
Enter fullscreen mode Exit fullscreen mode

VII. Styling

25. Inline Style

<div style={{ color: 'red', padding: 10 }}>Styled Text</div>
Enter fullscreen mode Exit fullscreen mode

26. Conditional Class

<div className={isActive ? 'active' : 'inactive'}>Status</div>
Enter fullscreen mode Exit fullscreen mode

27. CSS Modules

import styles from './Button.module.css';
<button className={styles.primary}>Click</button>
Enter fullscreen mode Exit fullscreen mode

VIII. Component Patterns

28. Higher-Order Component

const withLogger = Comp => props => {
  console.log(props);
  return <Comp {...props} />;
};
Enter fullscreen mode Exit fullscreen mode

29. Render Props

const Mouse = ({ children }) => {
  const [pos, setPos] = useState({x:0,y:0});
  return <div onMouseMove={e => setPos({x:e.clientX,y:e.clientY})}>
    {children(pos)}
  </div>;
};
Enter fullscreen mode Exit fullscreen mode

30. Custom Hook

const useWindowWidth = () => {
  const [w, setW] = useState(window.innerWidth);
  useEffect(() => {
    const h = () => setW(window.innerWidth);
    window.addEventListener('resize', h);
    return () => window.removeEventListener('resize', h);
  }, []);
  return w;
};
Enter fullscreen mode Exit fullscreen mode

IX. Error Handling

31. Error Boundary

class ErrorBoundary extends React.Component {
  state = { hasError: false };
  static getDerivedStateFromError() { return { hasError: true }; }
  render() {
    if (this.state.hasError) return <h3>Error Occurred</h3>;
    return this.props.children;
  }
}
Enter fullscreen mode Exit fullscreen mode

X. Performance & Optimization

32. React.memo

const MyComp = React.memo(({ value }) => <p>{value}</p>);
Enter fullscreen mode Exit fullscreen mode

33. Lazy Loading

const LazyComp = React.lazy(() => import('./LazyComp'));
<Suspense fallback={<p>Loading...</p>}>
  <LazyComp />
</Suspense>
Enter fullscreen mode Exit fullscreen mode

34. Dynamic Import

import('./math').then(module => module.add(2,3));
Enter fullscreen mode Exit fullscreen mode

XI. Miscellaneous

35. Fragment

<>
  <p>One</p>
  <p>Two</p>
</>
Enter fullscreen mode Exit fullscreen mode

36. Children Prop

const Card = ({children}) => <div className="card">{children}</div>;
Enter fullscreen mode Exit fullscreen mode

37. Spread Props

<input {...props} />
Enter fullscreen mode Exit fullscreen mode

38. forwardRef

const MyInput = React.forwardRef((props, ref) => <input ref={ref} {...props} />);
Enter fullscreen mode Exit fullscreen mode

39. useId (for accessibility)

const id = useId();
<label htmlFor={id}>Name</label>
<input id={id} />
Enter fullscreen mode Exit fullscreen mode

40. useLayoutEffect

useLayoutEffect(() => { console.log('DOM ready'); }, []);
Enter fullscreen mode Exit fullscreen mode

41. useImperativeHandle

useImperativeHandle(ref, () => ({ focus: () => inputRef.current.focus() }));
Enter fullscreen mode Exit fullscreen mode

42. Portals

ReactDOM.createPortal(<Modal />, document.getElementById('modal-root'));
Enter fullscreen mode Exit fullscreen mode

43. Suspense with Data

<Suspense fallback={<p>Loading...</p>}>
  <Profile />
</Suspense>
Enter fullscreen mode Exit fullscreen mode

44. useTransition

const [isPending, start] = useTransition();
Enter fullscreen mode Exit fullscreen mode

45. useDeferredValue

const deferred = useDeferredValue(value);
Enter fullscreen mode Exit fullscreen mode

46. Debounce with useEffect

useEffect(() => {
  const id = setTimeout(() => search(query), 500);
  return () => clearTimeout(id);
}, [query]);
Enter fullscreen mode Exit fullscreen mode

47. Throttling Scroll

useEffect(() => {
  const onScroll = throttle(() => setY(window.scrollY), 200);
  window.addEventListener('scroll', onScroll);
  return () => window.removeEventListener('scroll', onScroll);
}, []);
Enter fullscreen mode Exit fullscreen mode

48. Key Press Hook

const useKey = (key, cb) => {
  useEffect(() => {
    const handler = e => e.key === key && cb();
    window.addEventListener('keydown', handler);
    return () => window.removeEventListener('keydown', handler);
  }, [key, cb]);
};
Enter fullscreen mode Exit fullscreen mode

49. Dark Mode Hook

const useDarkMode = () => {
  const [dark, setDark] = useState(false);
  useEffect(() => {
    document.body.classList.toggle('dark', dark);
  }, [dark]);
  return [dark, setDark];
};
Enter fullscreen mode Exit fullscreen mode

50. Custom Fetch Hook

const useFetch = url => {
  const [data, setData] = useState(null);
  useEffect(() => { fetch(url).then(r => r.json()).then(setData); }, [url]);
  return data;
};
Enter fullscreen mode Exit fullscreen mode

Top comments (0)