reactjs - 如何使用 React 钩子在动态事件处理程序中增加值?
问题描述
我有一个 4 个方格,每个方格都有各自的状态。附加到每个方块的是一个动态事件处理程序,它将增加它们各自的状态。我没有正确实现动态逻辑,因为单击正方形按钮时状态不会增加。我究竟做错了什么?
export const Board = () => {
const [squares, setSquares] = useState({
squareOne: 0,
squareTwo: 0,
squareThree: 0,
squareFour: 0
});
const handleIncrement = (event) => {
const {
target: { name, value }
} = event;
setSquares({ ...squares, [name]: value + 1 });
};
return (
<div className="board">
<Square value={squares.squareOne} increment={handleIncrement} />
<Square value={squares.squareTwo} increment={handleIncrement} />
<Square value={squares.squareThree} increment={handleIncrement} />
<Square value={squares.squareFour} increment={handleIncrement} />
</div>
);
};
export const Square = ({ value, increment }) => {
return <button onClick={increment}>{value}</button>;
};
解决方案
export const Board = () => {
const [squares, setSquares] = useState({
squareOne: 0,
squareTwo: 0,
squareThree: 0,
squareFour: 0
});
const handleIncrement = (name) => () => {
setSquares({ ...squares, [name]: squares[name] + 1 });
};
return (
<div className="board">
<Square value={squares.squareOne} increment={handleIncrement('squareOne')} />
<Square value={squares.squareTwo} increment={handleIncrement('squareTwo')} />
<Square value={squares.squareThree} increment={handleIncrement('squareThree')} />
<Square value={squares.squareFour} increment={handleIncrement('squareFour')} />
</div>
);
};
export const Square = ({ value, increment }) => {
return <button onClick={increment}>{value}</button>;
};
您没有使用 name 属性。在解决方案句柄中,增量获取名称并返回一个函数,该函数将通过使用“闭包”来增加该部分状态。这样您的代码将正常工作。
推荐阅读
- ios - 如何在应用程序网站上配置 Apple SignIn?
- reactjs - Next.js 语言环境文件因为设置 basePath 而得到 404?
- python - 在 selenium python 中定位元素的问题
- ansible - 如何使 Ansible 仅打印具有标准输出的任务
- azure-powershell - 使用 PowerShell 的 Azure SQL Server 防火墙配置不起作用
- struct - 将结构对象转换为动态特征对象
- asp.net-core - 基于 Web Api 的 Asp.Net Core 3.1 角色授权不起作用
- python - 如何使用数组将包含具有 250 个变量的 JSON 的单列转换为 250 个单独的列数据集?
- mule - Mule Flow 仅用于集成测试
- java - 我们可以为特定的 URI 启用 Spring Boot 压缩吗?