Bird
Raised Fist0
Reactframework~20 mins

Separation of concerns in React - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Separation Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
1:30remaining
How does separation of concerns improve React component design?

Consider a React app where UI, data fetching, and state management are all mixed in one component. What is the main benefit of separating these concerns into different components or hooks?

AIt reduces the number of components, making the app faster to load.
BIt allows mixing UI and data logic freely without any structure.
CIt makes the code easier to read, test, and maintain by isolating responsibilities.
DIt forces all logic to be written inside the main App component for simplicity.
Attempts:
2 left
💡 Hint

Think about how breaking tasks into smaller parts helps in real life, like organizing a kitchen by utensils, ingredients, and appliances.

❓ state_output
intermediate
1:30remaining
What is the output of this React component with separated concerns?

Given the following React components, what will be rendered on the screen?

React
function useCounter() {
  const [count, setCount] = React.useState(0);
  React.useEffect(() => {
    const timer = setInterval(() => setCount(c => c + 1), 1000);
    return () => clearInterval(timer);
  }, []);
  return count;
}

function CounterDisplay() {
  const count = useCounter();
  return <div>Count: {count}</div>;
}
AA div showing 'Count: 0' initially, then increasing by 1 every second.
BA div showing 'Count: 0' that never changes.
CA div showing 'Count: NaN' due to incorrect state initialization.
DNothing renders because useCounter is not a valid hook.
Attempts:
2 left
💡 Hint

Look at how useCounter updates state every second and returns the count.

📝 Syntax
advanced
2:00remaining
Which option correctly separates data fetching from UI in React?

Choose the code snippet that properly separates data fetching logic from UI rendering using hooks.

A
function DataComponent() {
  const [data, setData] = React.useState(null);
  fetch('/api/data').then(res =&gt; res.json()).then(setData);
  if (!data) return &lt;div&gt;Loading...&lt;/div&gt;;
  return &lt;div&gt;{data.title}&lt;/div&gt;;
}
B
function useData() {
  const [data, setData] = React.useState(null);
  React.useEffect(() =&gt; {
    fetch('/api/data').then(res =&gt; res.json()).then(setData);
  }, []);
  return data;
}

function DataComponent() {
  const data = useData();
  if (!data) return &lt;div&gt;Loading...&lt;/div&gt;;
  return &lt;div&gt;{data.title}&lt;/div&gt;;
}
C
function DataComponent() {
  const data = fetch('/api/data').then(res =&gt; res.json());
  return &lt;div&gt;{data.title}&lt;/div&gt;;
}
D
function useData() {
  const data = fetch('/api/data').then(res =&gt; res.json());
  return data;
}

function DataComponent() {
  const data = useData();
  return &lt;div&gt;{data.title}&lt;/div&gt;;
}
Attempts:
2 left
💡 Hint

Remember that data fetching should happen inside useEffect to avoid infinite loops and to handle async properly.

🔧 Debug
advanced
2:00remaining
Why does this React component violate separation of concerns?

Examine the code below. What is the main problem related to separation of concerns?

React
function UserProfile() {
  const [user, setUser] = React.useState(null);
  React.useEffect(() => {
    fetch('/api/user').then(res => res.json()).then(setUser);
  }, []);

  function handleClick() {
    alert(`User: ${user.name}`);
  }

  return (
    <div>
      <h1>{user ? user.name : 'Loading...'}</h1>
      <button onClick={handleClick}>Show Name</button>
    </div>
  );
}
AThe component mixes data fetching, UI rendering, and event handling all in one place, making it harder to maintain.
BThe alert inside handleClick causes a runtime error if user is null.
CThe component does not fetch data correctly because useEffect is missing dependencies.
DThe component should not use useState for user data.
Attempts:
2 left
💡 Hint

Think about how separating data fetching, UI, and event logic into different parts helps clarity.

🧠 Conceptual
expert
2:30remaining
What is the best practice for separation of concerns in a large React app?

In a large React application, which approach best follows separation of concerns principles?

AUse only class components to keep state and UI tightly coupled.
BPut all logic and UI in one component to reduce the number of files and simplify imports.
CWrite all data fetching in the root App component and pass data down as props everywhere.
DUse custom hooks for data and state logic, presentational components for UI, and container components to connect them.
Attempts:
2 left
💡 Hint

Think about dividing tasks like a team where each member has a clear role.

Practice

(1/5)
1. What does separation of concerns mean in React development?
easy
A. Dividing the app so each part handles one specific task
B. Writing all code in a single component for simplicity
C. Mixing UI and data logic in the same function
D. Using only class components instead of functions

Solution

  1. Step 1: Understand the concept of separation of concerns

    It means each part of the app should focus on one clear responsibility, like UI or data handling.
  2. Step 2: Identify the correct description

    Dividing the app so each part handles one specific task correctly describes dividing the app so each part handles one specific task, which matches the concept.
  3. Final Answer:

    Dividing the app so each part handles one specific task -> Option A
  4. Quick Check:

    Separation of concerns = dividing tasks clearly [OK]
Hint: Think: one part, one job in your app [OK]
Common Mistakes:
  • Thinking all code should be in one component
  • Mixing UI and logic in the same place
  • Confusing separation with using classes
2. Which of the following is the correct way to separate UI and logic in React?
easy
A. Put all UI and logic inside one component's render method
B. Create a UI component and a separate hook for logic
C. Write logic inside HTML tags directly
D. Use inline styles to handle logic

Solution

  1. Step 1: Identify proper separation of UI and logic

    React encourages using components for UI and hooks or functions for logic.
  2. Step 2: Match options to this pattern

    Create a UI component and a separate hook for logic correctly separates UI in a component and logic in a hook, following best practices.
  3. Final Answer:

    Create a UI component and a separate hook for logic -> Option B
  4. Quick Check:

    UI + logic separated = Create a UI component and a separate hook for logic [OK]
Hint: Use hooks for logic, components for UI [OK]
Common Mistakes:
  • Putting logic inside render method
  • Trying to write logic inside HTML
  • Using styles to control logic
3. Given this React code, what will be the output?
function UserName({ name }) {
  return <h1>User: {name}</h1>;
}

function UserLogic() {
  const user = { name: 'Anna' };
  return <UserName name={user.name} />;
}
medium
A. <h1>User: </h1>
B. Error: user is undefined
C. <h1>User: Anna</h1>
D. UserName component not found

Solution

  1. Step 1: Trace the data flow from UserLogic to UserName

    UserLogic creates a user object with name 'Anna' and passes user.name as prop to UserName.
  2. Step 2: Check UserName output

    UserName receives name='Anna' and renders <h1>User: Anna</h1> correctly.
  3. Final Answer:

    <h1>User: Anna</h1> -> Option C
  4. Quick Check:

    Prop passed correctly = <h1>User: Anna</h1> [OK]
Hint: Follow props from parent to child component [OK]
Common Mistakes:
  • Assuming user is undefined outside UserLogic
  • Expecting empty output if prop missing
  • Confusing component names
4. What is wrong with this React code regarding separation of concerns?
function Profile() {
  const [user, setUser] = React.useState(null);
  React.useEffect(() => {
    fetch('/api/user')
      .then(res => res.json())
      .then(data => setUser(data));
  }, []);
  return <div>{user.name}</div>;
}
medium
A. Fetching data and UI rendering are mixed in one component
B. useEffect hook is used incorrectly
C. State should not be used in functional components
D. The fetch URL is invalid

Solution

  1. Step 1: Identify concerns in the Profile component

    Profile handles both fetching user data and rendering UI, mixing logic and UI.
  2. Step 2: Understand separation of concerns principle

    Best practice is to separate data fetching logic from UI components, e.g., using custom hooks.
  3. Final Answer:

    Fetching data and UI rendering are mixed in one component -> Option A
  4. Quick Check:

    Mixed logic and UI = Fetching data and UI rendering are mixed in one component [OK]
Hint: Keep data fetching separate from UI components [OK]
Common Mistakes:
  • Thinking useEffect is wrong here
  • Believing state can't be used in functions
  • Assuming fetch URL is the problem
5. You want to improve this React app's separation of concerns:
function Dashboard() {
  const [data, setData] = React.useState(null);
  React.useEffect(() => {
    fetch('/api/data')
      .then(res => res.json())
      .then(json => setData(json));
  }, []);
  return <div>{data ? <Display data={data} /> : 'Loading...'}</div>;
}

Which change best improves separation of concerns?
hard
A. Remove useEffect and fetch data synchronously
B. Combine Display and Dashboard into one component
C. Fetch data inside Display component instead
D. Move data fetching into a custom hook and keep Dashboard for UI only

Solution

  1. Step 1: Analyze current code responsibilities

    Dashboard handles both fetching data and rendering UI, mixing concerns.
  2. Step 2: Choose best separation approach

    Moving data fetching to a custom hook isolates logic, leaving Dashboard focused on UI.
  3. Final Answer:

    Move data fetching into a custom hook and keep Dashboard for UI only -> Option D
  4. Quick Check:

    Separate logic in hooks, UI in components = Move data fetching into a custom hook and keep Dashboard for UI only [OK]
Hint: Use custom hooks for logic, components for display [OK]
Common Mistakes:
  • Merging components reduces separation
  • Fetching data inside UI components mixes concerns
  • Removing useEffect breaks async data loading
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard