Skip to content

Components, Props, and State (Interview Essentials)

Core building blocks: props vs state, one-way data flow, and when to lift state up.

Rajesh DhimanFebruary 08, 20263 min read
On this page

30‑second interview answer

A component is a reusable unit of UI. Props are inputs passed from parent to child (read-only). State is a component’s internal memory that can change over time and trigger re-renders. React apps follow one-way data flow: data goes down via props; user actions go up via callbacks.


Components: what they really are

In modern React, a component is usually just a function:

function Greeting({ name }) {
  return <h1>Hello {name}</h1>;
}

React calls the function during the render phase to compute UI.

Component boundaries matter

Component boundaries are how you:

  • separate concerns
  • improve reuse
  • reduce re-render impact (smaller subtrees)

Props

What props are

Props are:

  • inputs to a component
  • immutable from the component’s perspective
  • how parents configure children
function Button({ variant, onClick, children }) {
  return (
    <button className={`btn btn-${variant}`} onClick={onClick}>
      {children}
    </button>
  );
}

Interview trap: “Can a child change props?”

Directly, no. A child can request changes by calling a callback provided via props:

function Parent() {
  const [value, setValue] = React.useState('');
  return <Child value={value} onChange={setValue} />;
}

State

What state is

State is the component’s internal memory:

  • it can change
  • it triggers re-renders
  • it should represent UI state (not derived duplicates)
const [open, setOpen] = React.useState(false);

Don’t store derived state unnecessarily

Bad:

const [fullName, setFullName] = useState(first + ' ' + last);

Better:

const fullName = first + ' ' + last;

Store the source of truth; derive the rest.


One-way data flow (how React stays predictable)

  • Data flows down: parent → child via props.
  • Events flow up: child → parent via callbacks.

This keeps state changes centralized and debugging easier.


Lifting state up (when and why)

When to lift state

Lift state up when:

  • two or more sibling components need the same data
  • you need a single source of truth

Example:

function Parent() {
  const [query, setQuery] = React.useState('');
 
  return (
    <>
      <SearchBox query={query} onQueryChange={setQuery} />
      <Results query={query} />
    </>
  );
}

When NOT to lift state

Don’t lift state if:

  • the state is truly local UI state (e.g., “is dropdown open?”)
  • lifting makes the tree harder to reason about

Controlled vs uncontrolled (quick note)

Interviewers often connect props/state to forms:

  • Controlled input: value comes from state
  • Uncontrolled input: DOM holds value; you read via refs

Controlled is more predictable and testable.


Common mistakes / interview traps

  1. Mutating state directly
state.items.push(x) // ❌

Instead create new arrays/objects.

  1. Passing new objects/functions every render This can break memoization.

  2. Using state when refs are enough If it doesn’t affect render, consider useRef.


Mini Q&A (practice)

Q1: What’s the difference between props and state?

  • Props are inputs from parents; state is internal and mutable via setters.

Q2: Why one-way data flow?

  • Predictability and easier debugging.

Q3: When to lift state up?

  • When multiple components need to stay in sync.

Summary checklist

  • I can define component/props/state clearly.
  • I can explain one-way data flow.
  • I know when to lift state up.
  • I avoid derived state pitfalls.
Companion Book

Looking for structured, offline interview prep?

Free online lessons • Portable Amazon Kindle / Paperback

Frontend Interview Guide (2025 Edition) cover
Recommended for React & Frontend Rounds

Frontend Interview Guide (2025 Edition)

By Rajesh Dhiman

Comprehensive preparation covering React internals, Web Performance, CSS architecture, and system design questions.

View on Amazon ↗Kindle & Paperback
JavaScript Interview Guide cover
Recommended for Core JS Rounds

JavaScript Interview Guide

By Rajesh Dhiman

Deep dive into the Event Loop, microtask draining, closures, prototypal inheritance, and asynchronous execution patterns.

View on Amazon ↗Kindle & Paperback

Note: All lessons on Frontend Interview remain completely free to read online. As an Amazon Associate, we may earn from qualifying purchases.

RD

Written by Rajesh Dhiman

Authored by Rajesh Dhiman and engineered at Eunix Tech. Focused on deep-dive frontend engineering, JavaScript runtime internals, React architecture, and web performance.