修改state某一对象的某个属性值/某json数组的某项的某个属性,其它保留不变

甲戌神展子江
• 阅读 4920

state中数据如下

this.state = {
  pageNav: {
    pageSize: 20,
    pageNum: 1,
    total: 50
  }
}

举例:只修改state中的total的值为100

错误方法:
// 如此做法,pageNav对象的属性全部替换为只有total一个属性,其它属性丢失。

// 熟悉vue,因为有数据绑定,其它属性值并不会丢失。因为使用react没多久,特此将自己的错误记录下  
this.setState({
    pageNav: {
        total: 100
        }
})

正确方法:

let pageNav = this.state.pageNav;
pageNav.total = 100;
this.setState({
    pageNav
})

批量修改多属性:

let obj =  {
  total: Number(res.data.total),
  pageSize: Number(res.data.size),
  current: Number(res.data.current),
}
let pageNav = Object.assign(this.state.pageNav,obj)
this.setState({
    pageNav
})

原文链接:https://blog.csdn.net/Wcharle...

进阶(修改state某json数组的某项的某个属性)

进阶一:

转载于https://blog.csdn.net/weixin_...

this.state = {
    listData: [
        {name: "小坏", age: "20"},
        {name: "小不", age: "21"},
    ]
}
change = (index) => {
    const listData = [...this.state.listData];   //复制数组--浅拷贝
    this.setState({
        listData: listData.map((item, idx) => idx === index ? {...item, name:  "陈小坏"} : item)                     
    })
}

进阶二:

this.state = {
    listData: [
        {name: "严光旺", age: {"青少年":18}},
        {name: "小不", age: "21"},
    ],
}

期望:

 listData: [
    {name: "严光旺", age: {"中老年人":30}},
    {name: "小不", age: "21"},
],

解决方案:

// index是0,要改的项的索引
change = (index) => {
    const listData = [...this.state.listData];   //复制数组--浅拷贝
    let age={"中老年人":30}
    this.setState({
        listData: listData.map((item, i) => i === index ? {...item, age} : item),
    })
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Chase620 Chase620
4年前
Vue方向:Vuex状态管理: 辅助函数mapState与mapGetters
1、mapState和mapGetters的作用   mapState用于将state中的数据映射到组件的计算属性中,而mapGetters用于将getter中的计算属性映射到组件的计算属性中,之前获取Vuex数据都是通过$store找到state对象,再去state中去拿数据,操作getter,muta
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Prometheus监控学习笔记之PromQL简单示例
0x00简单的时间序列选择返回度量指标http_requests_total的所有时间序列样本数据:http_requests_total返回度量指标名称为http_requests_total,标签分别是job"apiserver",handler"/api/comments"
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
React对state的初级理解
props是参数,个个Class之间传值用的。state则为某个Class的内部状态,Class需要根据这个state是否改变而做出改变;<div id"content"</div    <script type"text/babel"      var CommentForm  React.createC
Stella981 Stella981
3年前
ReactNative state更新,视图不更新的问题
开发中遇到这样的问题,我更新了state一个数组的某个元素的选中状态,打印出的数据也显示修改正确了,但是界面却没更新。例如下图点击某项修改选中状态。!(https://oscimg.oschina.net/oscnet/c3291a62b5f638d1e35dd7a719ade39f226.png)代码中之前是这样写的,结果界面没有更新。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(