¿Cuál es la diferencia entre forceUpdate y setState?

La diferencia entre forceUpdate() y setState() es que setState() vuelve a renderizar el componente si se cambia algún estado o accesorios de ese componente. Cuando llamamos a setState(), el método del ciclo de vida shouldComponentUpdate() llama automáticamente al método que decide si el componente debe volver a renderizarse o no. El método shouldComponentUpdate() sale del ciclo de vida de actualización si no hay motivo para volver a renderizar.

Mientras que el método forceUpdate() vuelve a renderizar el componente sin siquiera cambiar el estado o las propiedades. Cuando llamamos a forceUpdate(), volverá a renderizar el componente y omitirá el método shouldComponentUpdate().

Nota: Debemos intentar dejar de usar forceUpdate() siempre que sea posible y leer desde this.props y this.state durante el renderizado.

La diferencia entre el método forceUpdate y setState es:

método forceUpdate

Método setState

Vuelve a renderizar el componente sin siquiera cambiar el estado o los accesorios.

Vuelve a renderizar el componente si cambia algún estado o accesorios de ese componente.

Omite el método shouldComponentUpdate del ciclo de vida.

Llama al método shouldComponentUpdate del ciclo de vida.

No se recomienda este método.

Podemos usar setState cuando queremos actualizar el estado.

Básicamente, el método escribe los datos en this.state y luego llama al método render. Este método no escribe los datos en this.state, simplemente llama al método render.

Ejemplo 1: uso del método setState

Sintaxis:

this.setState({ state: this.state });

App.js: ahora escriba el siguiente código en el archivo App.js. Aquí, la aplicación es nuestro componente predeterminado donde hemos escrito nuestro código.

App.js

import React, { Component } from 'react';
  
class App extends Component {
  state = {
    name: '',
  }
  
  handleChange = (x) => {
    const { name, value } = x.target;
    this.setState({
      [name]: value,
    });
  }
  
  render() {
    return (
      <div >
        Name:
        <input type="text" name="name" onChange={this.handleChange} />
        <div>
          <h4> Hi, {this.state.name}!</h4>
        </div>
      </div>
    );
  }
}
  
export default App;

Paso para ejecutar la aplicación: ejecute la aplicación utilizando el siguiente comando desde el directorio raíz del proyecto:

npm start

Salida: Ahora abra su navegador y vaya a http://localhost:3000/ , verá la siguiente salida:

Explicación: Como podemos ver en el código anterior cuando escribimos en el cuadro de texto, las llamadas al método setState() establecen el último valor de nombre y vuelven a representar el componente cada vez.

Ejemplo 2. Uso del método forceUpdate

Sintaxis:

this.forceUpdate()

App.js: ahora escriba el siguiente código en el archivo App.js. Aquí, la aplicación es nuestro componente predeterminado donde hemos escrito nuestro código.

App.js

import React from 'react';
class App extends React.Component{
    
  handleForceUpdate = ()=>{
    this.forceUpdate();
  };
    
  render(){
    return(
      <div>
        <h3>Example of forceUpdate() method to show re-rendering <br></br>
        without changing state or props
        </h3>
        <button onClick= {this.handleForceUpdate} >
            FORCE UPDATE
        </button>
        <h4>Number is : 
           { Math.floor(Math.random() * (100000 - 1 + 1)) + 1 }
        </h4>
      </div>
    );
  }
}
  
export default App;

Paso para ejecutar la aplicación: ejecute la aplicación utilizando el siguiente comando desde el directorio raíz del proyecto:

npm start

Salida: Ahora abra su navegador y vaya a http://localhost:3000/ , verá la siguiente salida:

Explicación: como podemos ver en el ejemplo anterior, el componente se vuelve a renderizar sin cambiar las propiedades o el estado debido a la llamada al método forceUpdate(). El número aleatorio se regenera cuando el componente se vuelve a renderizar.

Publicación traducida automáticamente

Artículo escrito por KapilChhipa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *