Inheritance means creating a new component by extending an existing one, so the new component gets all features of the old one plus some new ones.
Click to reveal answer
beginner
What is composition in component design?
Composition means building components by combining smaller components together, like putting Lego blocks to make a bigger model.
Click to reveal answer
intermediate
Why is composition preferred over inheritance in Next.js?
Composition is preferred because it keeps components simple, reusable, and easier to understand. It avoids complex chains of inheritance that can be hard to manage.
Click to reveal answer
beginner
Give an example of composition in Next.js components.
Using a Button component inside a Card component is composition. The Card 'composes' the Button to build its UI.
Click to reveal answer
intermediate
What problem can inheritance cause in UI components?
Inheritance can create tight coupling and complex hierarchies, making components hard to change or reuse without affecting others.
Click to reveal answer
Which approach is like building with Lego blocks in Next.js?
AComposition
BInheritance
CBoth
DNeither
✗ Incorrect
Composition combines small components to build bigger ones, just like Lego blocks.
What does inheritance do in component design?
ACombines components side by side
BRemoves features from a component
CExtends a component to create a new one
DCreates components from scratch only
✗ Incorrect
Inheritance extends an existing component to add or change features.
Why might inheritance be less ideal in Next.js components?
AIt makes components too simple
BIt creates complex and tightly linked components
CIt does not allow reuse
DIt is not supported by Next.js
✗ Incorrect
Inheritance can cause complex chains that are hard to maintain.
ABy composing smaller components inside bigger ones
BBy using global CSS only
CBy copying code between components
DBy extending components with inheritance
✗ Incorrect
Next.js favors composing smaller components to build UI.
Explain the difference between composition and inheritance in Next.js component design.
Think about how Lego blocks (composition) differ from copying and changing a whole block (inheritance).
You got /4 concepts.
Describe why composition leads to more reusable and maintainable components in Next.js.
Consider how building with small pieces helps you swap or fix parts easily.
You got /4 concepts.
Practice
(1/5)
1. In Next.js, what is the main advantage of using composition over inheritance when building components?
easy
A. It allows combining small components for better reuse and clarity.
B. It requires less code to extend existing components.
C. It automatically manages component lifecycle methods.
D. It enforces strict type checking at compile time.
Solution
Step 1: Understand composition in Next.js
Composition means building components by combining smaller, reusable parts to create complex UI.
Step 2: Compare with inheritance
Inheritance extends existing components but can lead to complex and less clear code structures.
Final Answer:
It allows combining small components for better reuse and clarity. -> Option A
Quick Check:
Composition = combining parts for clarity [OK]
Hint: Composition combines parts; inheritance extends one component [OK]
Common Mistakes:
Thinking inheritance is simpler for UI reuse
Confusing lifecycle management with composition
Assuming inheritance is preferred in Next.js
2. Which of the following is the correct way to use composition in a Next.js functional component?
easy
A. function Parent() { return <Child>; }
B. function Parent() { return <Child></Child>; }
C. function Parent() { return Child(); }
D. class Parent extends Child {}
Solution
Step 1: Identify JSX syntax for composition
Composition uses JSX tags to include child components inside parent components.
Step 2: Check options for correct JSX usage
function Parent() { return <Child></Child>; } correctly uses <Child></Child> tags, which is valid JSX. function Parent() { return <Child>; } uses opening tag but missing closing tag. class Parent extends Child {} uses inheritance syntax, not composition. function Parent() { return Child(); } calls Child as a function, which is not standard JSX.
Final Answer:
<Child></Child> JSX tags for composition -> Option B
Quick Check:
JSX tags = composition [OK]
Hint: Use JSX tags to compose components, not class inheritance [OK]
Common Mistakes:
Using class extends syntax for composition
Calling components as plain functions without JSX
Missing closing tag for JSX element
3. Given the code below, what will be rendered on the screen?
function Button({ label }) {
return <button>{label}</button>;
}
function Toolbar() {
return <div><Button label="Save" /></div>;
}
medium
A. Save
B.
Save
C. Toolbar
D. Nothing renders due to syntax error
Solution
Step 1: Analyze Button component output
The Button component returns a button element with the label text inside it.
Step 2: Analyze Toolbar component output
Toolbar renders a div containing the Button component with label "Save", so the button with text "Save" appears inside the div.
Final Answer:
<button>Save</button> -> Option A
Quick Check:
Button label = Save [OK]
Hint: Look inside child component's return for rendered output [OK]
Common Mistakes:
Confusing parent div content with button content
Assuming Toolbar text appears inside button
Thinking syntax error exists due to JSX
4. Identify the error in this Next.js component using inheritance:
class BaseButton extends React.Component {
render() {
return <button>Base</button>;
}
}
function SubmitButton() {
return <BaseButton label="Submit" />;
}
medium
A. SubmitButton should extend BaseButton instead of being a function.
B. BaseButton cannot be used inside a function component.
C. React.Component cannot be extended in Next.js.
D. BaseButton does not use the label prop in render method.
Solution
Step 1: Check BaseButton usage of props
BaseButton receives a label prop but does not use it in the render method, so label is ignored.
Step 2: Check SubmitButton usage
SubmitButton returns BaseButton with label prop, but since BaseButton ignores label, the button always shows "Base".
Final Answer:
BaseButton does not use the label prop in render method. -> Option D
Quick Check:
Unused prop = bug [OK]
Hint: Check if props passed are actually used in render [OK]
Common Mistakes:
Thinking functional components can't use class components
Assuming inheritance is disallowed in Next.js
Confusing extending with composing
5. You want to create a reusable card component in Next.js that can display different content inside. Which approach best uses composition to achieve this?
function Card({ children }) {
return <div className="card">{children}</div>;
}
function Profile() {
return (
<Card>
<h2>User Name</h2>
<p>User details here</p>
</Card>
);
}
hard
A. Pass content as a string prop to Card and render inside.
B. Extend Card component with Profile using class inheritance.
C. Use children prop to pass nested components inside Card.
D. Create separate CardProfile component that duplicates Card code.
Solution
Step 1: Understand composition with children prop
The children prop allows passing any nested JSX inside Card, making it reusable for different content.
Step 2: Compare other options
Extending with inheritance is less flexible and not recommended. Passing content as string limits flexibility. Duplicating code reduces reuse.
Final Answer:
Use children prop to pass nested components inside Card. -> Option C
Quick Check:
children prop = composition [OK]
Hint: Use children prop to nest content inside reusable components [OK]
Common Mistakes:
Trying to extend components with class inheritance
Passing content as plain strings instead of JSX
Duplicating component code instead of composing
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.