可以选择传递给 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函数获取了输入字段的更新值。