reactjs - 更新对象的多个按钮
问题描述
我有一个状态,我需要更新嵌套对象中的多个按钮,然后使用 dispatch for redux 来更新商店,但仍然没有找到一个好的解决方案:
我有以下接口,我想按照其结构发送数据:
interface Object {
name: string;
buttons: {
button1: number;
button2: number;
button3: number;
button4: number;
};
}
所以我想避免我的状态更新状态是这样的解决方案:
const [name, setName] = useState("");
const [button1, setButton1] = useState(0);
const [button1, setButton1] = useState(0);
const [button1, setButton1] = useState(0);
const [button1, setButton1] = useState(0);
我想提交我的表单,我会遇到这样的状态:
const [object, setObject] = useState({
name: "";
buttons: {
button1: 0;
button2: 0;
button3: 0;
button4: 0;
};
})
function submit() {
dispatch( {
name: "";
buttons: {
button1: 3;
button2: 6;
button3: 8;
button4: 4;
}) }
所以当我尝试增加和减少我的按钮时,我通常会这样做,我想避免:
// increment
onClick={() => setButton1(button1 + 1)}
// decrement
onClick={() => setButton1(button1 - 1)}
那么有没有更好的解决方案呢?
解决方案
完整示例
import React, { useState } from "react";
export default function App() {
const [buttons, setButtons] = useState([0, 0, 0, 0])
const handleClick = (event) => {
const key = event.target.name
// Copy state
const newButtons = [...buttons]
// Update state
newButtons[key] += 1
// Submit state
setButtons(newButtons)
console.log(buttons)
}
return (
<div>
<button name="1" onClick={handleClick}>1 Button</button>
</div>
);
}
PS。如果你想完全克隆嵌套对象,你需要创建 cloneObject func 或使用 Immer 库,来自 lodash 的 clone(cloneDeep) func
具有名称属性的完整示例
import React, { useState } from "react";
import cloneDeep from "lodash.clone"
export default function App() {
const [state, setState] = useState({
name: "",
buttons: [0, 0, 0, 0]
})
const handleClick = (event) => {
const key = event.target.name
// Copy state
const newState = cloneDeep(state)
// Update state
newState.buttons[key] += 1
// Submit state
setState(newState)
console.log(state)
}
return (
<div>
<button name="1" onClick={handleClick}>1 Button</button>
</div>
);
}
推荐阅读
- python - flask_swagger_ui 不支持 Swagger 或 OpenAPI 版本字段
- python - 将列表的字符串元素添加到另一个字符串会导致尝试添加整个列表?
- python - 拆分 settings.py 文件时无法在 django 中启动新应用程序
- javascript - 按日期范围过滤对象数组
- python - 从 python 执行 Shell 脚本并将输出分配给变量
- rust - 如何指示异步函数的返回值的生命周期与参数的生命周期相同?
- java - Azure SDK 中的哪个 Java API 用于删除 NetworkSecurityRule?
- matlab - 如何在 simulink 上评估 7 阶多项式的根?
- java - 从firebase数据库获取数据时出现同步问题
- r - 是否有使用列中的定性要求对数据进行子集化的功能?