Make password character visible when typing each character and hide after few time interval in React

share link

by Abdul Rawoof A R dot icon Updated: Feb 10, 2023

technology logo
technology logo

Solution Kit Solution Kit  

Passwords are strings containing letters, numbers, or characters. For privacy purposes, passwords are vital elements for signing up on websites or many other applications. In several applications, as the characters are entered, they are replaced by some symbol. This can be done by using the following methods, props, or events in our code: 

  • Super(): We can create a constructor of class and then use the super prop. It calls the constructor of the parent class. 
  • preventDefault: It is used to prevent an event from happening if it is cancelable. So, whatever default action belongs to an event, will be canceled. 
  • onChange: This event occurs when there is a change of value in an event. So , this event will happen whenever we enter the new character that is the input change. 
  • setTimeOut(): This method will be used to set a particular time after which the characters will change into some symbol (based on the website/applications)  
  • clearTimeOut(): This is used to clear the interval set up by using setTimeOut method. 
  • render(): This is used to redirect a page. 


To know more about how to make the password character visible when typing each character and hide it after a few time intervals in React, refer to the code given below. 

Fig : Preview of the output that you will get on running this code from your IDE.

Code

In this solution we are using React library.

const styles = {
  facebookBtn: {
    backgroundColor: "rgb(51, 89, 157)"
  },
  form: {
    textAlign: "center"
  }
};

class Login extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      userName: "",
      password: "",
      passHidden: ""
    };
    this.clocks = {};
  }

  handleOnSubmit = e => {
    e.preventDefault();
    console.log("Submitted!");
  };

  getLastIndexChar = string => {
    return string.slice(string.length - 1);
  };

  hideAllChars = fieldName => {
    const value = this.state[fieldName];
    let password = "";
    if (value.length) {
      password = Array(value.length).join("•") + "•";
    }
    this.setState({ [fieldName]: password });
  };

  setFieldClock = fieldName => {
    clearTimeout(this.clocks[fieldName]);
    this.clocks[fieldName] = setTimeout(
      () => this.hideAllChars(fieldName),
      1000
    );
  };

  getTypingHiddenPassword = value => {
    return Array(value.length).join("•") + this.getLastIndexChar(value);
  };

  handlePasswordChanged = (fieldName, value) => {
    this.setFieldClock(fieldName);
    const password = this.getTypingHiddenPassword(value);
    this.setState({ [fieldName]: password });
  };

  inputChange = ({ target: { name, value } }) => {
    switch (name) {
      case "password":
      case "passHidden":
        this.handlePasswordChanged(name, value);
        break;
      default:
        this.setState({ [name]: value });
        break;
    }
  };

  render() {
    return (
      <form style={styles.form} onSubmit={this.handleOnSubmit}>
        <h4>Welcome Back!</h4>
        <div className="form-group row">
          <input
            className="input"
            name="userName"
            value={this.state.userName}
            onChange={this.inputChange}
            type="text"
            placeholder="Email"
          />
        </div>
        <div className="form-group row">
          <input
            className="input"
            name="password"
            value={this.state.password}
            onChange={this.inputChange}
            type="text"
            placeholder="Password"
          />
        </div>

        <div className="form-group row">
          <input
            className="input"
            name="passHidden"
            value={this.state.passHidden}
            onChange={this.inputChange}
            type="text"
            placeholder="Password"
          />
        </div>
        <div className="form-group row">
          <button className="btn" type="submit">
            Log In
          </button>
        </div>
      </form>
    );
  }
}

class Form extends React.Component {
  render() {
    const { children, title } = this.props;
    return (
      <div className="col-md-6 mx-auto">
        <header>
          <h1>{title}</h1>
        </header>
        {children}
      </div>
    );
  }
}

ReactDOM.render(<Form children={<Login />} />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

Instructions

Follow the steps carefully to get the output easily.

  1. Install the Node.js and React on your IDE(preferable Visual Studio Code).
  2. Create React Application using npx create-react-app foldername.
  3. cd foldername.
  4. Open the folder in IDE.
  5. Copy the code using "copy" button above and paste it in index.js file(remove the earlier code from index.js) then paste the script tag in index.html file.
  6. Import React and ReactDOM in index.js file.
  7. Open the terminal from IDE.
  8. npm start to run the file.


I hope you found this useful. I have added the link to dependent libraries, version information in the following sections.


I found this code snippet by searching for 'how to make password character visible when typing each character and hide few time interval in react' in kandi. You can try any such use case!

Environment Tested

I tested this solution in the following versions. Be mindful of changes when working with other versions.

  1. The solution is created in Visual Studio Code 1.73.1.
  2. The solution is tested on node v18.12.1 and npm v8.19.2.
  3. React version-18.2.0.


Using this solution, we are able to make password character visible when typing each character and hide after few time interval in React with simple steps. This process also facilities an easy way to use, hassle-free method to create a hands-on working version of code which would help us to make password character visible when typing each character and hide after few time interval in React.

Dependent Library

reactby facebook

JavaScript doticonstar image 209050 doticonVersion:v18.2.0doticon
License: Permissive (MIT)

The library for web and native user interfaces

Support
    Quality
      Security
        License
          Reuse

            reactby facebook

            JavaScript doticon star image 209050 doticonVersion:v18.2.0doticon License: Permissive (MIT)

            The library for web and native user interfaces
            Support
              Quality
                Security
                  License
                    Reuse

                      You can also search for any dependent libraries on kandi like 'react'.

                      Support

                      1. For any support on kandi solution kits, please use the chat
                      2. For further learning resources, visit the Open Weaver Community learning page.


                      See similar Kits and Libraries