📜  可以选择传递给 setState 的第二个参数是什么,它的目的是什么?

📅  最后修改于: 2022-05-13 01:56:40.546000             🧑  作者: Mango

可以选择传递给 setState 的第二个参数是什么,它的目的是什么?

可以选择传递给 setState 的第二个参数是一个回调函数,它在 setState 完成并重新渲染组件后立即被调用。

如果您希望您的程序使用 setState 更新状态的值,然后对更新的状态值执行某些操作,那么您必须在函数中指定这些操作,该函数应该是 setState 的第二个参数。如果我们不这样做,那么由于 setState 的异步特性,这些操作将在 state 的先前值上执行。

创建反应应用程序:

第 1 步:使用以下命令创建一个 React 应用程序:

npx create-react-app setState_example

第 2 步:创建项目文件夹后,即 setState_example ,使用以下命令移动到该文件夹:

cd setState_example

项目结构:它将如下所示。

App.js :现在在 App.js 文件中写下以下代码。

1. 不向 setState 传递第二个参数:

Javascript
import React, { Component } from 'react';
  
class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "GFG",
    };
  }
    
  updateName = (value) => {
    console.log("Previous name: "+this.state.name)
    this.setState({ name: value});
    console.log("Current name: "+this.state.name);
  };
  
  
  render() {
    const {name}  = this.state;
    return (
      
        

Welcome To GFG

            this.updateName(e.target.value)}           />       
    );   } }    export default App;


Javascript
import React, { Component } from 'react';
  
class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "GFG",
    };
  }
    
  updateName = (value) => {
    console.log("Previous name: "+this.state.name)
    this.setState({ name: value}, ()=>{
      
      // Passing it as a second parameter to setState
      console.log("Current name: "+this.state.name)
    });
  };
  
  render() {
    const {name}  = this.state;
    return (
      
        

Welcome To GFG

            this.updateName(e.target.value)}         />       
    );   } }    export default App;


运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出:现在打开浏览器并转到http://localhost:3000/ ,您将看到以下输出:

输出

说明:在将输入字段的值从“GFG”更改为“GeeskForGeeks”时,控制台窗口首先打印输入字段的当前值之前的值。但是当前值不等于我们在输入字段(即 GeeksForGeeks)中键入的值,这是因为我们没有在 setState 中声明 console.log(“Current name:”+this.state.name)函数,因为在输入字段的前一个值上调用哪个 console.log函数。它显示了 setState 的异步性质。

2. 将第二个参数传递给 setState。

Javascript

import React, { Component } from 'react';
  
class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "GFG",
    };
  }
    
  updateName = (value) => {
    console.log("Previous name: "+this.state.name)
    this.setState({ name: value}, ()=>{
      
      // Passing it as a second parameter to setState
      console.log("Current name: "+this.state.name)
    });
  };
  
  render() {
    const {name}  = this.state;
    return (
      
        

Welcome To GFG

            this.updateName(e.target.value)}         />       
    );   } }    export default App;

运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出:现在打开浏览器并转到http://localhost:3000/ ,您将看到以下输出:

输出

说明:在将输入字段的值从“GFG”更改为“GeeskForGeeks”时,控制台窗口首先打印输入字段的当前值之前的值。当前值与输入字段中的值匹配,这是因为我们在 setState 中声明了 console.log(“Current name:”+this.state.name)函数,因为 console.log函数获取了输入字段的更新值。