DEV Community

Abhinav Singh
Abhinav Singh

Posted on • Originally published at imabhinav.dev

Understanding Declarative Programming in React

React is a popular JavaScript library used for building user interfaces, and one of its core principles is declarative programming. To understand why React is declarative, we first need to grasp what declarative programming is and how it contrasts with imperative programming.

Declarative vs. Imperative Programming

Imperative Programming

Imperative programming is a programming paradigm where you explicitly describe the steps your program must take to achieve a desired state. In other words, you tell the computer how to do something.

Example of Imperative Programming:

Let's say we want to create a list of numbers from 1 to 5 and print them.

const numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
  console.log(numbers[i]);
}
Enter fullscreen mode Exit fullscreen mode

In this example, you:

  1. Create an array of numbers.
  2. Use a loop to iterate through each number.
  3. Print each number.

You specify how the task should be done step by step.

Declarative Programming

Declarative programming, on the other hand, is a paradigm where you describe what you want to achieve without explicitly outlining the steps to get there. You focus on the end result rather than the process.

Example of Declarative Programming:

Using the same task of printing numbers from 1 to 5, the declarative approach might look like this:

const numbers = [1, 2, 3, 4, 5];
numbers.forEach(number => console.log(number));
Enter fullscreen mode Exit fullscreen mode

In this example, you:

  1. Create an array of numbers.
  2. Use the forEach method to print each number.

You describe what you want to do (print each number) without specifying the underlying steps (the iteration process).

React and Declarative Programming

React embraces declarative programming, especially in how we describe the UI. Instead of detailing how the UI should change, we describe what the UI should look like in a given state.

Example: Creating a Button in React

Imperative Approach:

Without React, you might use vanilla JavaScript to create a button and attach an event listener:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Imperative Example</title>
</head>
<body>
  <div id="app"></div>
  <script>
    const appDiv = document.getElementById('app');
    const button = document.createElement('button');
    button.innerText = 'Click Me';
    button.addEventListener('click', () => {
      alert('Button Clicked');
    });
    appDiv.appendChild(button);
  </script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Here, you:

  1. Select a div element to hold the button.
  2. Create a button element.
  3. Set the button's text.
  4. Attach an event listener to the button.
  5. Append the button to the div.

Declarative Approach with React:

With React, you declare what the UI should look like using JSX:

import React from 'react';
import ReactDOM from 'react-dom';

function App() {
  return (
    <button onClick={() => alert('Button Clicked')}>
      Click Me
    </button>
  );
}

ReactDOM.render(<App />, document.getElementById('app'));
Enter fullscreen mode Exit fullscreen mode

In this example, you:

  1. Define a component (App) that returns the button element.
  2. Use JSX to describe the button and its event handler.
  3. Render the App component into the app div.

React takes care of the underlying DOM manipulation. You focus on describing what the UI should look like based on the application's state.

Benefits of Declarative Programming in React

  1. Simpler Code: Declarative code is often easier to read and understand because it focuses on the "what" rather than the "how."
  2. Maintainability: Changes are easier to manage and reason about since you modify descriptions of UI states rather than procedural steps.
  3. Reusability: Components can be reused across different parts of the application, promoting code reuse and consistency.

Conclusion

React's declarative nature allows developers to write more intuitive and manageable code by describing what the UI should look like in different states. By understanding the differences between declarative and imperative programming, you can appreciate why React's approach leads to cleaner and more efficient code.

Top comments (0)