reactjs - 在 React 中同时更新 React
问题描述
是否可以在 React 和同一个渲染中更新一个状态,我们可以使用更新后的值来更新另一个状态吗?
import "./styles.css";
import {useState} from 'react';
export default function App() {
const [num, setNum] = useState(0)
const [txt, setTxt] = useState(0)
handleClick= () =>{
setNum(num+1)
setTxt(num+1)
}
return (
<div className="App">
<input type="submit" value="button" onClick={handleClick} />
<h1>{num}</h1>
<h1>{txt}</h1>
</div>
);
}
在上面的示例中,num 和 txt 最初都设置为 0。第一次单击按钮会将 num 和 txt 都增加到 1,再次单击时会更新为 2,依此类推。
有没有办法在调用时立即将 num 更新为 1 setNum(num+1)
,以便它可以将其从 0 更新为 1,因此在调用setTxt(num+1)
时,它可以直接将其更新为 2?
解决方案
是的,你可以使用作为依赖的useEffect
钩子来做到这一点。num
这是一个 CodeSandbox:
import { useEffect, useState } from "react";
import "./styles.css";
export default function App() {
const [num, setNum] = useState(0);
const [txt, setTxt] = useState(0);
const handleClick = () => {
setNum(num + 1);
};
useEffect(() => {
if (num > 0) {
setTxt(num + 1);
}
}, [num]);
return (
<div className="App">
<input type="submit" value="button" onClick={handleClick} />
<h1>{num}</h1>
<h1>{txt}</h1>
</div>
);
}
如果实际状态只是一个数字而不是像数组/对象这样复杂的东西,那么你可以简单地这样做:
const handleClick = () => {
setNum(num + 1);
setTxt(num + 2);
};
推荐阅读
- css - CSS多列 - 段落分组?
- c# - 如何在 SQL Server 中查找中间有错误空格的数据?
- google-analytics - 谷歌分析:谷歌信号依赖什么查询字符串参数?
- javascript - 如何在 jQuery .siblings() 中编写选择器函数
- java - 支持 18:9 纵横比的 Android 启动画面
- angular - WebStorm - 重新格式化文件与内联装饰器
- regex - Google 表格中的正则表达式
- java - 静态是私有字符串的有用修饰符吗
- ruby-on-rails-5 - Mailer 函数 Ruby on Rails 问题
- azure - 排除 KQL SLA 图表中的数据