一、浅比较

出现情况: 明明改变了值, 并且回调函数也触发了, 但是就是不触发render

import React, { PureComponent } from 'react'
import {
InputNumber
} from 'antd' export default class example extends PureComponent{
//...
state = {
fruit: [{
type: 'bannana',
count: 0
},{
type: 'apple',
count: 0
}]
}
handleChange(val, type){
let { fruit } = this.state;
fruit.map(item => {
if(item.type == type) item.count = val
})
this.setState({
fruit,
},() => {
console.log('触发回调函数')
})
} render(){
console.log('触发render')
return(
<InputNumber onChange={(val) => this.handleChange(val,'apple')} />
)
}
}

出现了浅比较, 不触发render生命周期

解决方法: 赋值的时候改变fruit的指向.

this.setState({
fruit: [...fruit]
},() => {
console.log('触发回调函数')
})

react的this.setState没有触发render的更多相关文章

  1. [React技术内幕] setState的秘密

    对于大多数的React开发者,setState可能是最常用的API之一.React作为View层,通过改变data从而引发UI的更新.React不像Vue这种MVVM库,直接修改data并不能视图的改 ...

  2. react中this.setState的理解

    this.setState作用? 在react中要修改this.state要使用this.setState,因为this.state只是一个对象,单纯的修改state并不会触发ui更新.所以我们需要用 ...

  3. 从 0 到 1 实现 React 系列 —— 4.setState优化和ref的实现

    看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...

  4. react的this.setState中的坑

    react的this.setState中的有两个. 1.this.setState异步的,不能用同步的思维讨论问题 2.在进行组件通讯的回调的时候,this指向子组件,没有指向父亲这,怎么办呢.在 c ...

  5. react 关于this.setState使用时,第一次无法获取数据,第二次获取的数据是第一次触发的疑问

    我使用的是antd组件, compareClickFn(orderCodes, fileNames) { printLog("orderCodes----------"+ orde ...

  6. 解决react不能往setState中传key作为参数的办法(文章最后实现了传递key做参数的办法)

    读者朋友可以直接看最后一个分割线下面的那部分!利用方括号语法来动态的访问对象的属性,实现当参数为属性名的传递; 有时候我们需要每次单独设置众多state中的一个,但是,都是进行相同的操作,这时候如果每 ...

  7. react的this.setState详细介绍

    this.setState是react类组件中最常用的一个react API,使用它可以改变state从而改变页面.今天我们就来详细的学习一下这个东西.比如: import React, { Comp ...

  8. react之异步请求数据,render先行渲染报错,未拿到数据

    import React from 'react' import {connect} from 'react-redux' import { Redirect} from 'react-router- ...

  9. react中的setState的使用和深入理解

    前端框架从MVC过渡到MVVM.从DOM操作到数据驱动,一直在不断的进步着,提升着, angular中用的是watcher对象,vue是观察者模式,react就是state了,他们各有各的特点,没有好 ...

随机推荐

  1. PHP多线程 curl_multi_init 的使用

    php中可以通过CURL处理HTTP请求,其中curl_init()是单线程模式,如果需要对事务处理走多线程模式,那么就需要用到curl_multi_init()函数. 本案例用来测试大并发的情况下 ...

  2. namenode No valid image files

    1,角色日志报错 Encountered exception loading fsimage java.io.FileNotFoundException: No valid image files f ...

  3. 构建RN或Weex项目时,使用Android Studio常遇到的问题

    1 . androidStudio报错No cached version available for offline mode 解决方法 原因是之前为了提高编译速度,在Gradle设置选项中开启了Of ...

  4. tomcat 编码给为utf-8

    在tomcat下找到server.xml 打开server.xml,在下图加上URIEncoding="UTF-8".

  5. Respone弹窗

    Response.Write("<script>window.open('default.aspx?iID=" + GridView1.DataKeys[GridVie ...

  6. oracle之在java中调用

    1.给java项目添加oracle的驱动包ojdbc6.jar 2.添加包ojdbc6.jar,这个包在安装的服务版oracle11g的这个目录下: 3.使用.

  7. CentOS 7 部署GitLab

    GitLab概述 : 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过 Web 界面进行访问公开的戒者私人项目.Ruby on Rails 是一个可以 ...

  8. css基础教程

    css规则有两个主要部分构成:选择器,以及一条或多条声明. 值的不同写法和单位: 可以使用十六进制设置颜色值:#ff0000; 为节约字节,使用css缩写形式:#f00: 类选择器:以一个点号显示. ...

  9. 20175208『Java程序设计』课程 结对编程练习_四则运算

    20175208 结对编程练习_四则运算(第一周) 结对成员:20175208张家华,20175202葛旭阳 一.需求分析: 实现一个命令行程序,要求: (1)自动生成指定数量的小学四则运算题目(加. ...

  10. java线程学习之volatile关键字

    volatile变量的主要作用:是使变量在多个线程间可见. 在java中每一个线程都会有一块工作内存区,其中存放着所有线程共享的主内存的变量值的拷贝.当线程执行时,它在自己的工作内存区操作这些变量,为 ...