reactjs - 反应钩子,更新一个状态以响应另一个状态更新
问题描述
如何从第一个状态产生第二个状态,当第一个状态发生变化时,使第二个状态响应更新它?
它有效,但我不确定这样做有多可靠,有什么建议吗?谢谢。
export default function App() {
const [arr, setArr] = useState([1, 2, 3, 4, 5]);
const [length, setLength] = useState(arr.length);
console.log(arr)
const clickHandler = () => {
setArr([...arr, arr.length+1])
};
useEffect(() => {
setLength(length + 1)
}, [arr])
return (
<div className="App">
<h2>{length}</h2>
<button onClick={clickHandler}>click</button>
</div>
);
}
解决方案
因此,您希望每次数组长度更改时都更新“第二状态” (长度)。为此,您需要一个将数组长度作为依赖项 ( arr.length
) 的效果,然后将长度设置为该值。
还添加了对clickHandler
函数的更改,因为状态是从先前的状态计算出来的(查看此以获得更多详细信息)
这就是最终代码的样子
import React, { useState, useEffect } from "react";
import "./styles.css";
export default function App() {
const [arr, setArr] = useState([1, 2, 3, 4, 5]);
const [length, setLength] = useState(arr.length);
console.log(arr);
const clickHandler = () => {
setArr((arr) => [...arr, arr.length + 1]); // Change #1
};
useEffect(() => {
setLength(arr.length); // Change #2
}, [arr.length]);
return (
<div className="App">
<h2>{length}</h2>
<button onClick={clickHandler}>click</button>
</div>
);
}
推荐阅读
- typescript - 是否可以修改 TypeScript 中文字的推断类型?
- google-cloud-platform - Google Cloud Platform - “组织”类型的资源
- r - 从数据框中删除几行后如何绘制一列?
- prolog - 使用序言的阿姆斯壮数
- json - 数组的 JMeter jp@gc JSON/YAML 路径断言
- kubernetes - 已部署 OpenFaaS faasd 功能,但 URL 失败并显示“找不到服务”消息
- php - PHP:尝试在 Windows 10 中本地访问 file_get_contents 同级文件夹会导致权限被拒绝
- javascript - 使用 JavaScript 到 HTML (JSON) 的数组的循环关联
- docker - 无法通过服务名称访问 docker-swarm 容器
- excel - 优化 VBA 代码并提高性能