Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

react
javascript
node.js
communitycreator

How to edit text on double-click in ReactJS

Oluwatobi Sofela

Overview

We can edit the text of a page on double-click by following the steps below:

Step 1: Get the right Node and NPM version

Ensure that you have installed Node 10.16 (or greater) and NPM 5.6 (or greater) on your system.

Step 2: Create a new React app

Use NPM’s create-react-app package to create a new React app called click-text-to-edit-project.

npx create-react-app click-text-to-edit-project

Step 3: Clean up the src folder

Next, navigate to your project's src folder and perform a cleaning of the folder. Then, delete all its files.

Step 4: Create your code files

Create the following files inside your project’s src folder.

  • index.js
  • App.js
  • ElementMaker.js

Step 5: Render the App component

Open your index.js file and render the App component to the DOM like so:

// index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

// Render the App component into the root DOM
ReactDOM
  .createRoot(document.getElementById('root'))
  .render(<App />);

Step 6: Create the ElementMaker component

Open your ElementMaker.js file and replicate the code below:

// ElementMaker.js

import React from "react";

// Creat an ElementMaker component
function ElementMaker(props) {
  return (
    // Render a <span> element
    <span>
      {
        // Use JavaScript's ternary operator to specify <span>'s inner content
        props.showInputEle ? (
          <input 
            type="text"
            value={props.value}
            onChange={props.handleChange}
            onBlur={props.handleBlur}
            autoFocus
          />
        ) : (
          <span 
            onDoubleClick={props.handleDoubleClick}
            style={{ 
              display: "inline-block", 
              height: "25px", 
              minWidth: "300px", 
            }}
          >
            {props.value}
          </span>
        )
      }
    </span>
  );
}

export default ElementMaker;

As shown in the snippet above, we will do the following:

  1. We create an ElementMaker component that renders a <span> element.
  2. We use the ternary operator to specify the <span>’s inner content.

Simply put, the ternary operator says that if props.showInputEle’s value is truthy, the computer will use the given <input> element as the <span>’s inner content.

However, if props.showInputEle’s value is falsy, the computer will use a second <span> element as the first <span>’s inner content.

Step 7: Invoke the ElementMaker component

Open your App.js file and replicate the code below:

// App.js

import React, { useState } from "react";
import ElementMaker from "./ElementMaker";

// Creat an App component
function App() {
  // Set App's state
  const [fullName, setFullName] = useState("Joe Abraham");
  const [showInputEle, setShowInputEle] = useState(false);

  return (
    <div>
      <h1>Double Click the Full Name's Value to Edit</h1>
      <div>
        <strong>Full Name: </strong>
        {/* Invoke the ElementMaker component with some attributes */}
        <ElementMaker
          value={fullName}
          handleChange={(e) => setFullName(e.target.value)}  
          handleDoubleClick={() => setShowInputEle(true)} 
          handleBlur={() => setShowInputEle(false)}         
          showInputEle={showInputEle}
        />
      </div>
    </div>
  );
}

export default App;

The purpose of each attribute in the ElementMaker’s invocation above is as follows:

  • The value attribute keeps App’s fullName state.
  • handleChange’s function updates the state’s fullName property with the ElementMaker’s input element’s value.
  • handleDoubleClick’s function updates the state’s showInputEle property with the Boolean value true.
  • handleBlur’s function updates the state’s showInputEle property with the Boolean value false.
  • We initialize showInputEle with the state’s showInputEle property.

Step 8: Run the application

Take a look at your app in the browser by running:

npm start

You can also try mine below. It includes a line-by-line code explanation.

import React, { useState } from "react";
import ElementMaker from "./ElementMaker";

// Creat an App component
function App() {
  // Set App's state
  const [fullName, setFullName] = useState("Joe Abraham");
  const [showInputEle, setShowInputEle] = useState(false);

  return (
    <div>
      <h1>Double Click the Full Name's Value to Edit</h1>
      <div>
        <strong>Full Name: </strong>
        {/* Invoke the ElementMaker component with some attributes */}
        <ElementMaker
          value={fullName} // Initialize the ElementMaker's value attribute with App's fullName state
          handleChange={(e) => setFullName(e.target.value)} // Initialize the ElementMaker's handleChange attribute 
                                                            // with a function that updates the state's fullName 
                                                            // property with the ElementMaker's <input> element's value
          handleDoubleClick={() => setShowInputEle(true)} // Initialize handleDoubleClick with a function that updates
                                                          // state's showInputEle property with the Boolean value true
          handleBlur={() => setShowInputEle(false)} // Initialize handleBlur with a function that updates state's 
                                                    // showInputEle property with the Boolean value false
          showInputEle={showInputEle} // Initialized showInputEle with the state's showInputEle property
        />
      </div>
    </div>
  );
}

export default App;

RELATED TAGS

react
javascript
node.js
communitycreator
RELATED COURSES

View all Courses

Keep Exploring