微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ReactJs-TypeError:无法分配为只读对象“#<Object>”的属性“ name”

如何解决ReactJs-TypeError:无法分配为只读对象“#<Object>”的属性“ name”

我有一个对象数组:

var subcategories = [{name:'gloves',tag:'wool'},{name:'boots',tag: 'leather'}]

要做的就是找到对象的索引以更改名称标签。我使用此功能

function setSubcat(val,index,lang){
   var newArr = []
   var obj = {
      'name': val
   }
   subcategories.map((val,i)=>{
      if(index === i){
         var newObj = Object.assign(val,obj)
         newArr.push(newObj)
      }
      newArr.push(val)
   })
   setSubcategories(newArr)
}
           

错误发生在var newObj = Object.assign(val,obj)

我认为该错误意味着我无法直接更改状态,因此必须进行复制。我认为通过subcategories映射并将其推入本地newArr意味着我制作了该数组的副本。但是当我想更改其中的对象值时它不起作用,所以我使用了Object.assign,我认为这会从数组中深度复制特定的对象,但它也不起作用。

在这里想念什么?

解决方法

评论中指出:

  • 您发布的代码未显示您如何创建属性不可修改的对象
  • 您可以创建一个新对象,而不使用Object.assign消除错误
  • 以更惯用的方式使用map函数
interface TaggedItem {
    name: string,tag: string
}
var subcategories = [{name:'gloves',tag:'wool'},{name:'boots',tag: 'leather'}];

function setSubcat(val: string,index: number,_lang: any){
   var obj: Partial<TaggedItem> = {
      'name': val
   }
   var newArr: TaggedItem[] = subcategories.map((val,i)=>{
      if(index === i){
        return {
            ...val,...obj
        } 
      } else {
        return {...val};
        // or return val; if you don't need a full copy
      }
   })
   console.log(newArr);
}

setSubcat('newName',undefined);

Playground link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。