使用 React Hooks 更新状态数组的所有对象元素

Posted

技术标签:

【中文标题】使用 React Hooks 更新状态数组的所有对象元素【英文标题】:Update all Object Elements of a State Array with React Hooks 【发布时间】:2021-04-07 03:51:08 【问题描述】:

我有一个存储这些对象的状态数组:

const hoursArr = [
     value: 1, label: "hour" , isDisabled:false,
     value: 2, label: "hours" , isDisabled:false,
     value: 3, label: "hours" , isDisabled:false,
     value: 4, label: "hours" , isDisabled:false,
     value: 5, label: "hours" , isDisabled:false,
     value: 6, label: "hours" , isDisabled:false
]

然后我将这些对象分配到数组中

const [hours,setHours] = useState(hoursArr);

我想要实现的是迭代整个数组并将isDisabled 属性从false 更改为true

我已经这样做了:

let tmpHours = [];
tmpHours=hours.map(item=>item.isDisabled=false);

但是tmpHours 并没有存储整个对象,而只存储了布尔值false

我认为map() 函数返回了一个数组,但我似乎错了。我也找不到我的问题的答案。 提前致谢。

【问题讨论】:

【参考方案1】:
let tmpHours = [];
tmpHours=hours.map(item=>(...item, isDisabled: true));

【讨论】:

谢谢!我会像你一样接受你的回答。但我想问为什么我们需要括号 () ?我的意思是我看到我们在那里替换了isDisabled 属性,但我没有得到括号。 map()的参数应该是一个回调,从旧项目返回一个新项目。 item => (..item, isDisabled: true) 等同于 item => return ...item, isDisabled: true 我不知道那个。所以你说(...item, isDisabled:true)而不是return 。好东西!同样在您的回答中,您错过了右括号)【参考方案2】:

Map 方法创建一个新数组,其中填充了在调用数组中的每个元素上调用提供的函数的结果。您在迭代旧数组以修改 isDisabled 键值时缺少创建新元素。

你可以这样做:

    const hoursArr = [
         value: 1, label: "hour" , isDisabled:false,
         value: 2, label: "hours" , isDisabled:false,
         value: 3, label: "hours" , isDisabled:false,
         value: 4, label: "hours" , isDisabled:false,
         value: 5, label: "hours" , isDisabled:false,
         value: 6, label: "hours" , isDisabled:false
    ]
    
    const tmpHours = hoursArr.map((item) => 
        return  ...item, isDisabled: true ;
    );

【讨论】:

【参考方案3】:

const hoursArr = [
     value: 1, label: "hour" , isDisabled:false,
     value: 2, label: "hours" , isDisabled:false,
     value: 3, label: "hours" , isDisabled:false,
     value: 4, label: "hours" , isDisabled:false,
     value: 5, label: "hours" , isDisabled:false,
     value: 6, label: "hours" , isDisabled:false
]

let tmpHours = [];
tmpHours=hoursArr.map(item=>(...item,isDisabled:false));
console.log(tmpHours)

【讨论】:

以上是关于使用 React Hooks 更新状态数组的所有对象元素的主要内容,如果未能解决你的问题,请参考以下文章

React Hooks:使用useState更新状态不会立即更新状态[重复]

如何更改数组状态容器中的对象属性? React Hooks 使用状态

React Hooks setState 数组中的元素

我的状态没有使用 React Hooks 更新

React hooks - 等待状态更新

反应钩子。无法对未安装的组件执行 React 状态更新