首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第二次加载componentWillReceiveProps后状态更新,不会映射

是因为在React生命周期中,componentWillReceiveProps方法只会在组件接收到新的props时被调用,而不会在组件第二次加载时被调用。

在React中,组件的状态(state)和属性(props)是两个不同的概念。状态是组件内部管理的数据,可以通过this.state来访问和更新。属性是由父组件传递给子组件的数据,可以通过this.props来访问。

当组件接收到新的props时,React会调用componentWillReceiveProps方法,并将新的props作为参数传递给该方法。在componentWillReceiveProps方法中,可以根据新的props来更新组件的状态。

然而,如果组件第二次加载时,即使接收到了新的props,也不会再次调用componentWillReceiveProps方法。这是因为在React 16.3版本之后,componentWillReceiveProps方法被标记为过时(deprecated),并且在未来的版本中可能会被移除。取而代之的是,推荐使用新的生命周期方法getDerivedStateFromProps来处理props的更新。

getDerivedStateFromProps方法是一个静态方法,它接收新的props和当前的state作为参数,并返回一个新的state。在这个方法中,可以根据新的props来更新组件的状态。与componentWillReceiveProps方法不同的是,getDerivedStateFromProps方法在组件每次渲染之前都会被调用,包括组件第一次加载时和组件接收到新的props时。

综上所述,第二次加载componentWillReceiveProps后状态更新,不会映射是因为该方法只会在组件接收到新的props时被调用,而不会在组件第二次加载时被调用。在React 16.3版本之后,推荐使用getDerivedStateFromProps方法来处理props的更新。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云数据库MySQL版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React基础(8)-React中组件的生命周期

组件的更新  当props或者state发生改变的时候,就会引起render函数的渲染,也就是会引发组件的更新,它与组件的装载一样,会触发一些生命周期函数 更新组件时:生命周期函数执行的顺序 componentWillReceiveProps...函数 你可以理解为,第一次渲染时,父组件的componentWillReceiveProps函数不会被执行,如果是第二次渲染时,已经存在于父组件中,则该componentWillReceiveProps...才会执行 注意:在挂载过程中,React不会针对初始props调用此方法,通过触发setState方法更新过程不会调用这个函数,这是因为这个函数适合根据新的props值(也就是nextProps)来计算出是不是要更新内部状态...state 应用场景:当你希望只有在接收新的props时做一些逻辑,props改变需要相应改变内部state状态时,则使用componentWillReceiveProps,比如:根据父组件传入的数据初始化或重置组件内部的某些...值,告诉React库这个组件在这次更新过程是否要继续,如果该函数返回true,那么继续更新,调用render函数,反之,若函数返回false,那么立刻停止更新过程,便不会执行render函数了的 这个函数是提高

2.2K20

React学习(八)-React中组件的生命周期

就会引起render函数的渲染,也就是会引发组件的更新,它与组件的装载一样,会触发一些生命周期函数 更新组件时:生命周期函数执行的顺序 componentWillReceiveProps(nextProps...函数 你可以理解为,第一次渲染时,父组件的componentWillReceiveProps函数不会被执行,如果是第二次渲染时,已经存在于父组件中,则该componentWillReceiveProps...才会执行 注意:在挂载过程中,React不会针对初始props调用此方法,通过触发setState方法更新过程不会调用这个函数,这是因为这个函数适合根据新的props值(也就是nextProps)来计算出是不是要更新内部状态...state 应用场景:当你希望只有在接收新的props时做一些逻辑,props改变需要相应改变内部state状态时,则使用componentWillReceiveProps,比如:根据父组件传入的数据初始化或重置组件内部的某些...值,告诉React库这个组件在这次更新过程是否要继续,如果该函数返回true,那么继续更新,调用render函数,反之,若函数返回false,那么立刻停止更新过程,便不会执行render函数了的 这个函数是提高

1.6K20
  • 你需要的react面试高频考察点总结

    ,先改变DOM渲染),不会产生闪烁。...是最新的值,所以tabColumn每次也是最新的值,但是实际tabColumn是最开始的值,不会随着columns的更新更新:const TableDeail = ({ columns,}:TableData...componentWillMount方法的调用在constructor之后,在render之前,在这方法里的代码调用setState方法不会触发重新render,所以它一般不会用来作加载数据之用。...在componentWillMount中fetch data,数据一定在render才能到达,如果忘记了设置初始状态,用户体验不好。...在一个组件传入的props更新时重新渲染该组件常用的方法是在componentWillReceiveProps中将新的props更新到组件的state中(这种state被成为派生状态(Derived State

    3.6K30

    前端react面试题总结

    解答如果您尝试直接改变组件的状态,React 将无法得知它需要重新渲染组件。通过使用setState()方法,React 可以更新组件的UI。另外,您还可以谈谈如何不保证状态更新是同步的。...用户访问 ViewView发出用户的 ActionDispatcher 收到Action,要求 Store 进行相应的更新Store 更新,发出一个"change"事件View 收到"change"事件...componentWillReceiveProps调用时机已经被废弃掉当props改变的时候才调用,子组件第二次接收到props的时候这三个点(...)在 React 干嘛用的?......而异步获取外部数据,渲染并不会等待数据返回再去渲染class Example extends React.Component { state = { value: ''...案例三:如下是列表加载更新回到当前滚动条位置的案例class ScrollingList extends React.Component { listRef = null; previousScrollOffset

    2.5K30

    React Native组件(一)组件的生命周期

    生命周期的方法就是组件在虚拟DOM中不同状态的描述。 ?...componentDidMount componentDidMount() componentDidMount方法在组件被挂载立即调用,在render方法被执行。...如果需要从网络加载数据显示到界面上,在这里进行网络请求是一个不错的选择。在componentDidMount方法中设置state将会被重新渲染。...通常在这个方法中接收新的props值,并根据props的变化,通过调用 this.setState() 来更新组件state,this.setState()不会触发 render方法的调用。...在挂载的过程中,初始的props并不会触发调用componentWillReceiveProps方法,这个方法只会在组件中的props更新时被调用,另外,调用this.setState()也不会触发调用

    1.7K50

    React Native生命周期生命周期props和state

    在组件被创建并加载候,首先调用 getInitialState() ,来初始化组件的状态。...componentWillMount 修改state不会引发render的再次渲染 然后,准备加载组件,会调用 componentWillMount() ,其原型如下: void componentWillMount...componentWillReceiveProps 修改state不会引发render的再次渲染 如果组件收到新的属性(props),就会调用componentWillReceiveProps()...在这个回调函数里面,你可以根据属性的变化,通过调用 this.setState() 来更新你的组件状态,这里调用更新状态是安全的,并不会触发额外的 render() 调用。...这个函数的返回值决定是否需要更新组件,如果 true 表示需要更新,继续走后面的更新流程。否者,则不更新,直接进入等待状态

    83820

    前端面试指南之React篇(二)

    componentWillReceiveProps:在初始化render的时候不会执行,它会在组件接受到新的状态(Props)时被触发,一般用于父组件状态更新时子组件的重新渲染shouldComponentUpdate...如下所示, username没有存储在DOM元素内,而是存储在组件的状态中。每次要更新 username时,就要调用 setState更新状态;每次要获取 username的值,就要获取组件状态值。...不要直接更新状态状态更新可能是异步的状态更新要合并。数据从上向下流动如何用 React构建( build)生产模式?...,先改变DOM渲染),不会产生闪烁。...案例三:如下是列表加载更新回到当前滚动条位置的案例class ScrollingList extends React.Component { listRef = null; previousScrollOffset

    2.8K120

    浅谈 React 生命周期

    它将触发额外渲染,但此渲染会发生在浏览器更新屏幕之前。如此保证了即使在 render() 两次调用的情况下,用户也不会看到中间状态。请谨慎使用该模式,因为它会导致性能问题。...首次渲染不会执行此方法。 当组件更新,可以在此处对 DOM 进行操作。如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求。...componentWillUnmount() 中**不应调用 setState()**,因为该组件将永远不会重新渲染。组件实例卸载,将永远不会再挂载它。...在挂载过程中,React 不会针对初始 props 调用 UNSAFE_componentWillReceiveProps()。组件只会在组件的 props 更新时调用此方法。...「父子组件生命周期执行顺序总结」: 当子组件自身状态改变时,不会对父组件产生副作用的情况下,父组件不会进行更新,即不会触发父组件的生命周期 当父组件中状态发生变化(包括子组件的挂载以及卸载)时,会触发自身对应的生命周期以及子组件的更新

    2.3K20

    React Native组件生命周期

    如图: 第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化; 第二阶段:是组件在运行和交互阶段,如图中左下角虚线框,这个阶段组件可以处理用户交互,或者接收事件更新界面;...作用是通知系统准备加载组件。 componentDidMount 该方法是在调用了render方法,通知组件已经加载完成。...一般会在这个函数中处理网络请求等加载数据的操作; 存在期阶段分析 componentWillReceiveProps 如果组件收到新的属性(props),就会调用 componentWillReceiveProps...旧的属性还是可以通过 this.props 来获取,通过调用 this.setState() 来更新你的组件状态,这里调用更新状态是安全的,并不会触发额外的 render() 调用。...如果 true 表示需要更新,继续走后面的更新流程。否者,则不更新,直接进入等待状态

    1.1K90

    React生命周期简单分析

    如果在这个方法内调用 setState,render() 将会感知到更新的 state,将会执行仅一次,尽管 state 改变了....如果需要从远端加载数据的话, 推荐在这个方法中初始化 由于这个方法发生初始化挂载render方法之后, 因此在这个方法中调用setState()会导致一次额外的渲染, 只不过这次渲染会发生在浏览器更新屏幕之前...因此即使渲染了两次, 用户也不会看到中间状态, 即不会有那种状态突然跳一下的情况发生....在初始化渲染的时候该方法不会被调用, 在render方法之前. 使用该方法做一些更新之前的准备工作, 例如读取当前某个 DOM 元素的状态并在componentDidUpdate中进行处理....当需要更新状态时,需要返回一个 object ,如果不需要任何更新,则返回null即可. 2.1.3 如果由于父组件的原因导致该组件重新渲染,这个方法也会被调用, 如果只想要处理更新的话,最好加上判断条件

    1.2K10

    React中传入组件的props改变时更新组件的几种实现方法

    我们使用react的时候常常需要在一个组件传入的props更新时重新渲染该组件,常用的方法是在componentWillReceiveProps中将新的props更新到组件的state中(这种state...现在点击‘编辑’和‘新建’按钮,输入框中的文字并不会切换,因为点击‘编辑’和‘更新’时,虽然UserInput的props改变了但是并没有触发state的更新。...所以需要实现props改变引发state更新,在UserInput中增加代码: componentWillReceiveProps(nextProps) { this.setState({...问题二 假设页面加载完成,会异步请求一些数据然后更新页面,如果用户在请求完成页面刷新之前已经在输入框中输入了一些文字,随着页面的刷新输入框中的文字会被清除。...或许有人会觉得这样性能会受影响,其实性能并不会变慢多少,而且如果组件的更新逻辑过于复杂的话,还不如重新创建一个新的组件来的快。

    5K30

    React 基础实例教程

    细心点可以看到,Info组件中的setState是放在了componentWillReceiveProps中 为什么不直接在shouldComponentUpdate中判断是否需要更新更新状态呢?...根据上方的流程图,如果在这里更新,就会再次触发state改变,导致又多循环执行了一次 所以一般的做法是在componentWillReceiveProps中根据条件判断是否需要更新状态,然后在shouldComponentUpdate...Page传来的新值inputValue,然而InputItem中的defaultValue并不会更新 这种情况,就不适用与defaultValue了,换成用状态控制的value即可 2.2 值(value...通过componentWillReceiveProps更新状态值 加入onChange事件,在输入的时候更新状态值 而对于onChange事件的调用更新state,也有点点小技巧 假如input项目太多...在BoxBanner组件中引入了一个InputItem组件,但InputItem组件被共享,只在页面开始加载是被加载了 传递到layer中的content似乎只是加载的结果,可以看到isFirst值不是预想的

    4.4K20

    React入门系列(四)组件的生命周期

    在React中,调用setState方法,React不会立即对其更新,而是将其标记为“脏”状态 (组件状态更新不会立刻生效,React使用事件轮询对变更内容进行批量绘制)。...当事件轮询结束,React将“脏”组件及其子节点进行重绘,所有后代节点的render方法都会被调用,哪怕它们没法发生变化。...(nextProps){ console.log("componentWillReceiveProps:" + nextProps); } /*指定是否更新props和...componentDidMount:[object HTMLButtonElement] 可见,渲染组件的componentWillMount阶段,真实DOM还没有生成;到了componentDidMount阶段,组件才真正被加载到...;type:btn componentDidUpdate-prevState:count:0 可见,如果组件自身的state更新(点击button,触发onClick事件),会依次执行shouldComponentUpdate

    78830

    在 React 16 中从 setState 返回 null 的妙用

    这时会加载一个新的 mocktail,并在加载完成渲染出这个 mocktail 的图像。...生命周期方法中调用 setTimeout,将加载状态设置为 true达 500 毫秒。...每次使用新的 mocktail 状态更新 Mocktail 组件的 props 时,它会用半秒钟显示加载动画,然后渲染 mocktail 图像。...解决方案 以下是我们将要遵循的步骤,来防止不必要的重新渲染: 检查新的状态值是否与现有值相同 如果值相同,我们将返回 null 返回 null 将不会更新状态和触发组件重新渲染 首先,在 app 组件的...但是,如果我们再次单击同一个mocktail按钮,React 不会重新渲染 Mocktail 组件,因为 setState 返回 null,所以状态没有改变,也就不会触发更新

    14.5K20

    React 组件生命周期

    组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM 生命周期的方法有: componentWillMount...componentWillReceiveProps 在组件接收到一个新的 prop (更新)时被调用。这个方法在初始化render时不会被调用。...可以在你确认不需要更新组件时使用。 componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。...componentDidUpdate 在组件完成更新立即调用。在初始化时不会被调用。 componentWillUnmount在组件从 DOM 中移除之前立刻被调用。...以下实例在 Hello 组件加载以后,通过 componentDidMount 方法设置一个定时器,每隔100毫秒重新设置组件的透明度,并重新渲染: React 实例 class Hello extends

    31910

    前端开发常见面试题,有参考答案

    该函数会在replaceState设置成功,且组件重新渲染调用。总结: setState 是修改其中的部分状态,相当于 Object.assign,只是覆盖,不会减少原来的状态。...来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用。...componentWillReceiveProps在初始化render的时候不会执行,它会在Component接受到新的状态(Props)时被触发,一般用于父组件状态更新时子组件的重新渲染。...在一个组件传入的props更新时重新渲染该组件常用的方法是在componentWillReceiveProps中将新的props更新到组件的state中(这种state被成为派生状态(Derived State..._updateProps()); // 加入_updateProps()至store里的监听事件列表 } // 执行action更新props,使组件可以更新至最新状态(类似于

    1.3K20
    领券