javascript - 函数无法使用 useEffect 访问即时状态更改
问题描述
我正在尝试学习如何使用 Hooks
我正在渲染一个数组列表删除第一个元素onclick状态正在该handleclick函数中更新但它没有渲染
export default function App() {
const [name, setName] = useState("");
const [arry, setArry] = useState([1, 2, 3, 4, 5]);
const _log = () => {
let ar = arry;
ar.shift();
setArry(ar);
console.log(arry, "log");
};
const renderlist = () => {
console.log(arry, "--");
if (arry.length > 1) {
return arry.map((a) => <li>{a}</li>);
}
}; //
return (
<div className="App">
<button onClick={_log}>shift</button>
{renderlist()}
</div>
);
} ```
解决方案
您需要将不同的值(数组)传递给setArry
. 因为useState
被优化为不改变值 if newValue === currValue
。
你传递了相同的数组,因为你改变了它,这是 React 中的反模式(正如你在行动中看到的那样)。
const _log = () => {
const [_, ...ar] = arry;
setArry(ar);
// or setArry(([_, ...ar]) => ar);
console.log(arry, "log");
};
推荐阅读
- unix - 将多行合并为一行,每条记录由unix中的空行分隔
- r - 在 ggplot 中的每个点的 x 轴上显示 x 值
- tensorflow - 在浏览器中使用 BodyPix 进行人员检测
- xcode - react-native run-ios 构建失败
- spring - PageableHandlerMethodArgumentResolverCustomizer 与默认存储库方法一起使用,但未传入自定义控制器 SPRING BOOT
- scala - Scala中的下划线
- algorithm - 为什么算法时间复杂度通常以步骤/操作来定义?
- cordova - cordova-google-plus 抛出错误代码 10
- arrays - 如何使用c编程计算csv文件中的行数和列数
- flutter - 经过时间后的颤振通知