ReactJS is now one of the most well-known libraries used in building user interfaces particularly when it comes to single page applications. Developers can develop reusable UI components using its component-based architecture, which makes development a lot more efficient and maintainable. Companies across the globe are seeking skilled React developers to enhance their web applications.
In this blog post, we are going to discuss some ReactJS interview questions that you need to be aware of. We will start with basic questions that will help you establish a solid foundation and then move on to intermediate and advanced-level interview questions as well. The guide is meant to assist all levels of developers, from beginners to experienced ones, who wish to prepare for their next ReactJS interviews.
Get curriculum highlights, career paths, industry insights and accelerate your technology journey.
Download brochure
Basic-level ReactJS Interview Questions
1. What is ReactJS?
ReactJS is a JavaScript framework for building user interfaces, primarily for single-page applications. Developed by Facebook, it allows developers to create reusable UI components. These components help in building complex user interfaces from small, isolated pieces of code. React uses a virtual DOM to improve performance, updating only the necessary parts of the UI when the state changes.
2. What is MVC architecture in ReactJS?
MVC stands for Model-View-Controller, a design pattern used to separate concerns in application development. In MVC architecture:
- Model: Represents the data and business logic.
- View: Represents the UI components and presentation logic.
- Controller: Handles user input and interacts with the Model and View to update the UI.
ReactJS does not strictly follow the MVC architecture. Instead, it focuses mainly on the View layer, providing a component-based approach to build UIs. The Model and Controller aspects can be handled using other libraries and patterns, such as Redux for state management.
3. What is JSX?
JSX stands for JavaScript XML. It is a syntax extension for JavaScript used in React to describe the UI structure. JSX looks similar to HTML but allows you to write HTML elements in JavaScript and place them in the DOM. It helps in creating React elements, making the code more readable and easier to debug. Here’s an example of JSX:
const element = <h1>Hello, world!</h1>;
4. What are components and their types in React?
Components are the building blocks of a React application. They allow you to split the UI into independent, reusable pieces. Components can be broadly classified into two types:
- Class Components: Defined using ES6 class syntax, they can maintain local state and lifecycle methods.
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
- Function Components: Defined using JavaScript functions, they don’t have state or lifecycle methods until the introduction of Hooks in React 16.8.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
5. When should you use a class component over a function component?
Class components were traditionally used when you needed to manage state or lifecycle methods. However, with the introduction of Hooks in React 16.8, function components can now handle state and lifecycle methods, making them equally powerful. You might still use class components if:
- You are working on an older codebase that uses class components.
- You prefer the syntax and structure of class components.
- You need to use certain lifecycle methods that are not easily replicated with Hooks (though this is rare).
6. How to create an event in React? Explain with basic code.
In React, you can handle events similarly to handling events in plain HTML. However, the syntax is slightly different.
Here is how you can create and handle an event in a React component:
import React, { useState } from ‘react’;
function ButtonClick() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
};
return (
<div>
<button onClick={handleClick}>Click me</button>
<p>You clicked {count} times</p>
</div>
);
}
export default ButtonClick;
In this example, the handleClick function is called when the button is clicked, updating the state using setCount.
7. What are the key features of ReactJS?
ReactJS offers several key features that make it a popular choice for building user interfaces:
- Component-Based Architecture: Allows for building encapsulated components that manage their own state.
- Virtual DOM: Improves performance by updating only the parts of the DOM that have changed.
- JSX: A syntax extension that combines JavaScript and HTML-like code for easier component creation.
- Unidirectional Data Flow: This makes the code more predictable and easier to debug.
- Hooks: Allow you to use state and other React features in function components.
8. What is the difference between Virtual DOM and Real DOM?
The Virtual DOM and Real DOM differ in several ways:
Feature |
Virtual DOM |
Real DOM |
Definition |
A lightweight copy of the Real DOM |
The actual Document Object Model |
Updates |
Updates are batched and optimised |
Direct updates on the elements |
Performance |
Faster updates due to less re-rendering |
Slower updates due to re-rendering |
Usage |
Used by React to improve performance |
Used by the browser to render the page |
9. Why is React widely used today?
React is widely used today for several reasons:
- Component-Based Architecture: Promotes reusability and easier management of the UI.
- Performance: The Virtual DOM optimises updates and improves rendering performance.
- Flexibility: It can be used with other libraries or frameworks and for both client-side and server-side rendering.
- Developer Tools: It has excellent tools for debugging and development.
- Strong Community: A large and active community that contributes to a rich ecosystem of libraries, tools, and resources.
10. Explain the difference between Angular and React.
Angular and React are both popular front-end frameworks/libraries, but they have key differences:
Feature |
Angular |
React |
Type |
Full-fledged framework |
Library focusing on the view layer |
Language |
TypeScript (a superset of JavaScript) |
JavaScript and JSX |
Data Binding |
Two-way data binding |
One-way data binding |
DOM |
Real DOM |
Virtual DOM |
Learning Curve |
Steeper due to more features |
Easier with a simpler API |
Architecture |
Component-based with MVVM |
Component-based |
State Management |
Built-in (RxJS, NgRx) |
External libraries (Redux, MobX) |
11. What are Hooks in React?
Hooks are functions that let you use state and other React features in function components.
Common hooks include:
- useState: Manages state.
- useEffect: Handles side effects.
- useContext: Accesses context values.
12. How do you write comments in React?
In JSX, use curly braces with JavaScript comment syntax:
{/* This is a comment in JSX */}
Outside of JSX, use regular JavaScript comments:
// Single-line comment
/* Multi-line comment */
13. How to use styles in React?
You can style React components using:
- Inline Styles: <div style={{ color: ‘blue’ }}>Hello</div>
- CSS Classes: <div className=”myClass”>Hello</div>
- CSS Modules:
import styles from ‘./App.module.css’;
<div className={styles.myClass}>Hello</div>
import styled from ‘styled-components’;
const StyledDiv = styled.divcolor: blue;
<StyledDiv>Hello</StyledDiv>
14. How to use InnerHtml in React?
To use innerHTML in React, use dangerouslySetInnerHTML. Ensure the content is from a trusted source to avoid security risks.
<div dangerouslySetInnerHTML={{ __html: ‘<h1>Hello, world!</h1>’ }} />
15. How to loop inside JSX?
You can loop inside JSX using JavaScript’s map() function. Here’s an example:
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li key={number.toString()}>{number}</li>
);
return (
<ul>{listItems}</ul>
);
16. What is a React Router?
React Router is a library for routing in React applications. It allows you to define multiple routes in your app and navigate between them. It provides components like <BrowserRouter>, <Route>, and <Link> to handle the routing process.
17. What is Redux?
Redux is a state management library for JavaScript apps. It helps you manage the application state in a predictable way by using a single source of truth (the store). It uses actions and reducers to handle state changes and middleware like Redux Thunk for asynchronous operations.
18. Explain how to create a list in React.
To create a list in React, use the map() function to iterate over an array and return a list of elements. Here’s a simple example:
const items = [‘Apple’, ‘Banana’, ‘Cherry’];
const itemList = items.map((item) =>
<li key={item}>{item}</li>
);
return (
<ul>{itemList}</ul>
);
19. What are the limitations of React?
Some limitations of React include:
- Learning Curve: This can be steep for beginners.
- Complex Configuration: Requires setup and configuration for advanced features.
- Boilerplate Code: This may require additional boilerplate for state management.
- Performance Issues: This can occur with large applications if not optimised properly.
20. What are Pure Components?
Pure Components in React are components that do not re-render if their props and state have not changed. They perform a shallow comparison of props and state to determine if a re-render is necessary, optimising performance. You can create a Pure Component by extending React.PureComponent.
21. What is a state in React?
State in React is an object that holds data that may change over the component’s lifecycle. It allows components to create and manage their own data, which can trigger re-rendering when updated. State is typically managed within class components using this.state and this.setState, or in function components using the useState hook.
Example using the class component:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment = () => {
this.setState({ count: this.state.count + 1 });
};
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={this.increment}>Increment</button>
</div>
);
}
}
Example using function component:
import React, { useState } from ‘react’;
function MyComponent() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
}
22. What are props in React?
Props (short for properties) are read-only attributes passed from a parent component to a child component. They allow components to communicate with each other and pass data down the component tree. Props are accessed in a component via this.props in class components or directly in function components as function arguments.
Example using the class component:
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
// Usage
<Greeting name=”John” />
Example using the function component:
function Greeting(props) {
return <h1>Hello, {props.name}</h1>;
}
// Usage
<Greeting name=”John” />
23. What is the difference between state and props?
Aspect |
State |
Props |
Mutability |
Mutable (can be changed) |
Immutable (read-only) |
Ownership |
Owned by the component |
Passed from parent to child component |
Usage |
Manages dynamic data |
Passes static or dynamic data to the child |
24. Differentiate HTML and React event handling.
Feature |
HTML |
React |
Syntax |
onclick=”handleClick()” |
onClick={handleClick} |
Event Binding |
Inline string in HTML |
JavaScript function in JSX |
Event Names |
Lowercase (onclick) |
CamelCase (onClick) |
Event Object |
Uses the global event object |
Uses the synthetic event object |
This Binding |
Need to manually bind this |
Automatically binds this |
25. Why does React use className over class attribute?
React uses className instead of class to avoid conflicts with the reserved keyword class in JavaScript. Using className ensures that the JSX syntax remains compatible with JavaScript, preventing any syntax errors or ambiguities.
26. What is the React memo function?
React.memo is a higher-order component that memorises the rendered output of a function component, preventing unnecessary re-renders when the component’s props have not changed. This optimization can improve performance, especially for components that do not need to re-render frequently.
Example:
const MyComponent = React.memo(function MyComponent(props) {
return <div>{props.name}</div>;
});
27. What is the React lazy function?
React.lazy is a function that allows you to load components lazily through code splitting. It helps reduce the initial bundle size by loading components only when they are needed. This function works with React’s Suspense component to provide a fallback while the lazy component is loading.
Example:
const OtherComponent = React.lazy(() => import(‘./OtherComponent’));
function MyComponent() {
return (
<React.Suspense fallback={<div>Loading…</div>}>
<OtherComponent />
</React.Suspense>
);
}
28. What are default props?
Default props are values that are assigned to props when no value is provided by the parent component. They provide a way to ensure that a component has a fallback value for its props.
Example:
class MyComponent extends React.Component {
render() {
return <div>{this.props.name}</div>;
}
}
MyComponent.defaultProps = {
name: ‘Guest’,
};
// Usage
<MyComponent /> // Renders: <div>Guest</div>
29. When do you need to use refs?
Refs in React are used to directly access and manipulate DOM elements or React elements. They are useful in scenarios such as:
- Managing focus, text selection, or media playback.
- Triggering imperative animations.
- Integrating with third-party DOM libraries.
Example:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount() {
this.myRef.current.focus();
}
render() {
return <input type=”text” ref={this.myRef} />;
}
}
30. How do you print falsy values in JSX?
In JSX, falsy values like 0 or false are not rendered by default. To print falsy values, you can use logical operators or conditional statements to ensure they are displayed.
Example:
function MyComponent({ value }) {
return (
<div>
{value === 0 ? 0 : value}
</div>
);
}
31. Explain the conditional rendering in React.
Conditional rendering in React allows you to render different components or elements based on certain conditions. You can use JavaScript operators like if, ternary operator, and logical &&` to achieve conditional rendering.
Example:
function MyComponent({ isLoggedIn }) {
return (
<div>
{isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign in</h1>}
</div>
);
}
32. What are the components of a react-router?
The main components of React Router are:
Component |
Description |
BrowserRouter |
Uses HTML5 history API to keep your UI in sync with the URL. |
Route |
Renders a specific component based on the URL path. |
Link |
Creates hyperlinks to navigate between routes. |
Switch |
Renders the first child Route or Redirect that matches the location. |
Redirect |
Redirects to a different route. |
NavLink |
A special version of Link that adds styling attributes when active. |
33. What are the lifecycle methods of components?
React class components have several lifecycle methods, categorised by the phases of the component lifecycle:
Phase |
Lifecycle Method |
Description |
Mounting |
constructor |
Initialises component state and binds methods. |
|
static getDerivedStateFromProps |
Updates state based on props before rendering. |
|
render |
Returns the JSX to render to the DOM. |
|
componentDidMount |
Executes after the component is inserted into the DOM. |
Updating |
static getDerivedStateFromProps |
Updates state based on props before rendering. |
|
shouldComponentUpdate |
Determines whether the component should re-render. |
|
render |
Returns the JSX to render to the DOM. |
|
getSnapshotBeforeUpdate |
Captures some information before the DOM is updated. |
|
componentDidUpdate |
Executes after the component updates are flushed to the DOM. |
Unmounting |
componentWillUnmount |
Executes just before the component is removed from the DOM. |
34. Explain this.setState function in React.
The this.setState function in React is used to update the state of a component. It merges the new state with the existing state and triggers a re-render of the component. setState can take an object or a function as its argument.
Example:
this.setState({ count: this.state.count + 1 });
Or using a function:
this.setState((prevState) => ({ count: prevState.count + 1 }));
35. What is the useEffect hook in react?
The useEffect hook is used to perform side effects in function components. It runs after the initial render and after every update. You can control when useEffect runs by providing a dependency array as the second argument.
Example:
import React, { useEffect } from ‘react’;
function MyComponent() {
useEffect(() => {
document.title = ‘My Component’;
}, []); // Runs only once after initial render
return <div>My Component</div>;
}
36. What is prop drilling and its disadvantages?
Prop drilling is the process of passing data from a parent component to a deeply nested child component through multiple intermediary components. This can make the code harder to maintain and understand, as many intermediate components need to pass the props without using them.
37. How can you create a React application and print Hello World?
To create a React application and print “Hello World,” follow these steps:
Install Create React App:
npx create-react-app my-app
cd my-app
Edit the App Component: Open src/App.js and modify it:
function App() {
return (
<div className=”App”>
<h1>Hello World</h1>
</div>
);
}
export default App;
Run the Application:
npm start
This will start the development server and open the app in the browser, displaying “Hello World”.
38. Explain the difference between controlled and uncontrolled components.
Feature |
Controlled Component |
Uncontrolled Component |
Data Management |
Managed by React state |
Managed by the DOM |
Control |
Easier to control and validate |
Less control over form data |
Complexity |
Requires more setup with state handlers |
Simpler, less setup needed |
Advanced-level ReactJS Interview Questions
39. What are Higher-Order components?
Higher-order components (HOCs) are functions that take a component and return a new component with additional props or behaviour. They are used for reusing component logic. HOCs do not modify the original component but wrap it, providing enhanced functionality.
Example:
function withEnhancement(WrappedComponent) {
return function EnhancedComponent(props) {
return <WrappedComponent {…props} additionalProp=”value” />;
};
}
40. What are fragments?
Fragments are a way to group multiple elements without adding extra nodes to the DOM. They are useful when a component needs to return multiple elements, but you don’t want to wrap them in a div or another container element.
Example:
function MyComponent() {
return (
<React.Fragment>
<h1>Title</h1>
<p>Description</p>
</React.Fragment>
);
}
41. Why are fragments better than container divs?
Fragments are better than container divs because they:
- Avoid Extra Nodes: Do not add unnecessary DOM elements, keeping the DOM cleaner.
- Improved Performance: Reduce the amount of DOM manipulation and rendering.
- Simplify Styling: Prevent CSS issues related to extra div wrappers.
42. Differentiate stateful and stateless components.
Feature |
Stateful Component |
Stateless Component |
State Management |
Manages its own state |
Does not manage state |
Component Type |
Usually, class components (or function components with hooks) |
Usually function components |
Use Case |
Dynamic behaviour that changes over time |
Static content or UI without dynamic behaviour |
43. What are the core principles of Redux?
The core principles of Redux are:
- Single Source of Truth: The entire application’s state is stored in a single object tree within a single store.
- State is Read-Only: The only way to change the state is to dispatch an action, an object that describes what happened.
- Changes are Made with Pure Functions: Reducers specify how the state changes in response to actions. Reducers must be pure functions that return the new state based on the previous state and action.
44. How to reset the state in Redux?
To reset the state in Redux, you can handle a reset action in your reducer. Here’s how:
Define the Reset Action:
const RESET_STATE = ‘RESET_STATE’;
Create the Reset Action Creator:
const resetState = () => ({
type: RESET_STATE,
});
Handle the Reset Action in the Reducer:
const initialState = { count: 0 };
function rootReducer(state = initialState, action) {
switch (action.type) {
case RESET_STATE:
return initialState;
// other cases
default:
return state;
}
}
Dispatch the Reset Action:
store.dispatch(resetState());
45. What is Redux DevTools?
Redux DevTools is a powerful tool for debugging Redux applications. It allows developers to:
- Inspect every state and action payload.
- Travel through the state’s history.
- Revert or replay actions.
- Persist state across sessions.
- Integrate with Chrome and Firefox browser extensions for an enhanced debugging experience.
46. What are the differences between redux-saga and redux-thunk?
Feature |
redux-saga |
redux-thunk |
Purpose |
Handles complex asynchronous tasks using sagas |
Handles simple asynchronous tasks using functions |
Implementation |
Uses generator functions to yield effects |
Uses plain functions returning functions |
Complexity |
Suitable for complex logic and side effects |
Suitable for simple async logic |
Middleware |
Requires redux-saga middleware |
Requires redux-thunk middleware |
Readability |
More declarative and easier to test |
More imperative and straightforward |
47. Explain the custom hooks in React.
Custom hooks in React are functions that allow you to extract and reuse stateful logic across multiple components. They enable you to encapsulate common behaviour and side effects into a single reusable hook.
Example of a Custom Hook:
import { useState, useEffect } from ‘react’;
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch(url)
.then((response) => response.json())
.then((data) => {
setData(data);
setLoading(false);
});
}, [url]);
return { data, loading };
}
// Usage
function MyComponent() {
const { data, loading } = useFetch(‘https://api.example.com/data’);
if (loading) return <div>Loading…</div>;
return <div>{JSON.stringify(data)}</div>;
}
48. Explain the difference between useState and useReducer hooks.
Feature |
useState |
useReducer |
Purpose |
Manages simple state |
Manages more complex state logic |
Syntax |
const [state, setState] = useState(initialState); |
const [state, dispatch] = useReducer(reducer, initialState); |
Updates |
State updated using setState |
State updated using dispatch with actions |
Best For |
Simple, local state |
Complex state logic or multiple sub-values |
49. Compare Redux and Context API for state management.
Feature |
Redux |
Context API |
Purpose |
Manages complex state and side effects |
Passes data through the component tree |
API |
Provides a full-featured state management library |
Part of React’s built-in API |
Boilerplate |
Requires more setup and boilerplate code |
Less setup, simpler API |
Middleware |
Supports middleware like redux-thunk and redux-saga for async actions |
No built-in support for middleware |
Scalability |
Suitable for large-scale applications |
Best for smaller applications or limited state sharing |
Performance |
Better for performance with complex state logic |
Can lead to performance issues if not used carefully in large apps |
Learning Curve |
Steeper learning curve due to its complexity |
Easier to learn and implement |
50. Explain Strict Mode in React.
Strict Mode in React is a development tool that helps identify potential issues in an application. It activates additional checks and warnings for its descendants. Strict Mode does not render any visible UI and does not affect the production build. It helps in:
- Identifying components with unsafe lifecycle methods.
- Warning about legacy string ref API usage.
- Detecting unexpected side effects.
- Checking for deprecated API usage.
51. What is React Material UI?
React Material UI is a popular React UI framework that implements Google’s Material Design guidelines. It provides a set of pre-built, customizable components that can be used to build modern, responsive user interfaces. The components are designed to be visually appealing and offer a consistent look and feel across different devices and platforms.
Key Features:
- Pre-Built Components: It includes components like buttons, cards, dialogs, and more.
- Theming: It allows for easy customization of the overall look and feel through themes.
- Responsive Design: It ensures components work well on different screen sizes.
Conclusion
In this blog, we covered a comprehensive range of ReactJS interview questions from basic to advanced levels. We explored essential concepts like JSX, components, state management, and hooks, providing a solid foundation for both beginners and experienced developers. We also delved into advanced topics like Redux, custom hooks, and performance optimization techniques. By understanding and mastering these questions, you’ll be well-prepared to tackle any ReactJS interview.