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

React-Redux :在父更改中的mapStateToProps上重新渲染子组件不起作用

React-Redux是一个用于在React应用中管理状态的库。它结合了React和Redux,提供了一种可预测、可维护和可扩展的状态管理解决方案。

在React-Redux中,通过使用connect函数将React组件连接到Redux的store。connect函数接受两个参数:mapStateToProps和mapDispatchToProps。其中,mapStateToProps是一个函数,用于将store中的状态映射到组件的props上;mapDispatchToProps是一个函数或对象,用于将action创建函数映射到组件的props上。

当父组件中的mapStateToProps发生变化时,React-Redux会检测到这个变化,并重新渲染子组件。但是,如果在父组件中的mapStateToProps中的返回值没有发生变化,React-Redux会认为子组件的props没有变化,从而不会重新渲染子组件。

这种情况下,可能有以下几个原因导致子组件不重新渲染:

  1. mapStateToProps返回的对象或数组没有发生变化:React-Redux使用浅比较来检测props是否发生变化,如果返回的对象或数组没有发生引用变化,即使其中的值发生了变化,子组件也不会重新渲染。解决方法是确保返回的对象或数组是一个新的引用。
  2. 父组件没有重新渲染:如果父组件没有重新渲染,那么子组件也不会重新渲染。可以检查父组件的shouldComponentUpdate方法或React.memo来确保父组件的重新渲染。
  3. 子组件的shouldComponentUpdate或React.memo阻止了重新渲染:如果子组件中的shouldComponentUpdate方法返回false,或者使用了React.memo并且props没有发生变化,那么子组件不会重新渲染。可以检查子组件的shouldComponentUpdate方法或React.memo的使用。

总结起来,如果在父组件中的mapStateToProps上重新渲染子组件不起作用,可以检查返回的对象或数组是否发生了引用变化,确保父组件重新渲染,以及检查子组件的shouldComponentUpdate方法或React.memo的使用。

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

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器CVM:https://cloud.tencent.com/product/cvm
  • 云数据库MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎TKE:https://cloud.tencent.com/product/tke
  • 人工智能平台AI Lab:https://cloud.tencent.com/product/ailab
  • 物联网平台IoT Hub:https://cloud.tencent.com/product/iothub
  • 移动开发平台MPS:https://cloud.tencent.com/product/mps
  • 云存储COS:https://cloud.tencent.com/product/cos
  • 区块链服务BCS:https://cloud.tencent.com/product/bcs
  • 元宇宙服务:https://cloud.tencent.com/product/metaspace
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

vue组件传值给组件组件值改变,组件不能重新渲染

1组件中用watch()监听值改变,不同类型要用不同监听方法 props: { echartStyle: { type: Object, default() {...opinionData:{ handler(newValue,oldValue){ this.getChange(); }, deep:true } }, 2 组件中用...$refs.str.method()值改变地方来调用组件方法 来 重新渲染(暂时使用有bug,不能够及时渲染,组件值已经改变了,但是组件值仍然没有改变,不能够及时渲染) 这个方法感觉props...’接收数据调用方法之后,明明组件值已经改变了,但是组件调用组件方法时,数据仍然没有 接收到,调用之后才接收到,这个方法暂且没用,应该是声明ref时候声明是当前组件实例,然后调用时调用也是值未改变时属性...$refs.pieChart.getChange(); } }, 3 组件使用 v-if =”flag” (谢谢各位老哥建议) 初始flag:true 修改data时 changData(

2.9K30

手写一个React-Redux,玩转ReactContext API

但是下面还想讲一下React-Redux是怎么保证组件更新顺序,因为源码很多代码都是处理这个。...->这种单向数据流,如果他们一个公用变量变化了,肯定是组件先更新,然后参数传给组件再更新,但是Redux里,数据变成了Redux -> ,Redux -> 完全可以根据Redux...connect判断是否变化时候使用是浅比较,也就是只比较一层,所以mapStateToProps和mapDispatchToProps不要反回多层嵌套对象。...为了解决组件组件各自独立依赖Redux,破坏了React级->更新流程,React-Redux使用Subscription类自己管理了一套通知流程。...只有连接到Redux最顶级组件才会直接注册到Redux store,其他组件都会注册到最近组件subscription实例

3.7K21
  • Taro一个组件map渲染组件列表时候,问题

    其实问题还是自己想偷懒而且不注意导致,可以说是小程序页面和组件界限 我们开发时候,组件和页面一定要分开,如果是组件的话,就一定不要当成页面组件pages配置,就拿列表组件来说 场景:我一个列表...这样就导致了首次渲染数据空白!!!!...但是开发者工具看时候,其实数据已经是有的,百思不得其解啊,于是就放弃了,差不多首次就是这样 image.png 可以看到,appData数据是正常,但是第一次map展示就是有问题,值出不来,...就是简单react 列表渲染一个组件 image.png 于是.......过了十天 我还是放不下!...【灵机一动,会不会是小程序页面和组件之间边界出了问题呢】 我就去掉了 image.png

    2K20

    React总结概括

    setState会自动调用render函数,触发视图重新渲染,如果仅仅只是state数据变化而没有调用setState,并不会触发更新。...在这种假设之上进行逐层比较,如果发现对应节点是不同,那就直接删除旧节点以及它所包含所有节点然后替换成新节点。如果是相同节点,则只进行属性更改。...constructor是构造器,实例化对象时调用,super调用了constructor创造了实例对象this,然后用子类构造函数进行修改。...触发render函数重新渲染dom。...解决通信问题方法很多,如果只是父子级关系,级可以将一个回调函数当作属性传递给级,级可以直接调用函数从而和级通信。

    1.2K20

    实现redux

    React里父子组件可以通过props通信,兄弟组件通信需要把数据传递给组件,再由组件传递给另一个组件。以兄弟组件通信为需求,写一个Redux。 问题 ?...兄弟组件通信 首先分析这个需求,点击button,改变数字,Number组件重新渲染。 ? 可抽象为,派发一个动作,改变状态,执行方法。 ?...上面代码里可以看出组件许多代码是重复,可以进一步抽象组件,最后抽象成React-Redux。...React-Redux里要实现一个外层组件,负责传递store和渲染组件,功能比较简单 export default class Provider extends Component { static...高阶组件负责把storestate和dispatch作为props传递给需要渲染组件,还有实现生命周期函数里公共功能。

    74720

    react-redux 开发实践与学习分享

    基础开发出来,与flux主要区别是只有一个store,关于store,后文会详述。...各大框架均可使用,当然各个框架也有自己再度封装状态管理库,如angularngrx,vuevuex,而本文主要介绍是reactreact-redux。 示例介绍 ?...通过路由进入主页面,主页面渲染dom代码为: render() { // 这个组件是一个包裹组件,所有的路由跳转页面都会以this.props.children形式加载到本组件下...mapStateToProps这个取值函数,取也就是相关reducer返回值。 触发相关action后主页控制台: ?...至此,就完成了react-redux对于父子组件通信,由组件向上推送信息至组件,触发相关操作。

    90130

    React 进阶 - React Redux

    ,那么会将 Redux state 数据,映射到当前组件 props 组件可以使用消费 当需要 state ,有变化时候,会通知当前组件更新,重新渲染视图 可以利用 connect 提供功能...)(Index) 通过 mapStateToProps 获取指定 state 内容,然后渲染视图 # React-Redux 实现组件通信 function ComponentA({ toCompB...中一方面用来订阅来自 state 变化,另一方面通知对应组件更新 Provider 订阅器 subscription 为根订阅器 Provider useEffect ,进行真正绑定订阅功能...订阅器是最根部订阅器,可以通过 trySubscribe 和 addNestedSub 方法可以看到 如果组件是一个 connect ,子孙组件也有 connect ,那么父子 connect... Subscription 也会建立起父子关系 订下发 调用 trySubscribe 时候,能够看到订阅器会和上一级订阅器通过 addNestedSub 建立起关联 当 store

    92610

    Vue 组件为何不可以修改组件传递 Prop

    所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:级 prop 更新会向下流动到组件,但是反过来则不行。...这样会防止从子组件意外变更组件状态,从而导致你应用数据流向难以理解。 额外,每次组件发生变更时,组件中所有的 prop 都将会刷新为最新值。...initProps时候,defineReactive时通过判断是否开发环境,如果是开发环境,会在触发set时候判断是否此key是否处于updatingChildren中被修改,如果不是,说明此修改来自组件...需要特别注意是,当你从子组件修改prop属于基础类型时会触发提示。 这种情况下,你是无法修改组件数据源, 因为基础类型赋值时是值拷贝。...你直接将另一个非基础类型(Object, array)赋值到此key时也会触发提示(但实际不会影响组件数据源), 当你修改object属性时不会触发提示,并且会修改组件数据源数据。

    2.3K10

    组件vuex方法更新state,组件不能及时更新并渲染解决方法

    场景: 我实际用到是这样,我组件引用组件related,组件调用获取页面详情方法,更新了state值related,组件根据该related来渲染相关新闻内容,但是页面打开时候总是先加载组件...,组件渲染时候还没有获取到更新之后related值,即使组件watch该值变化依然不能渲染出来组件相关新闻内容。...我解决办法: 组件组件传值,当组件执行了获取页面详情方法之后,state值related更新,然后传给组件组件再进行渲染,可以正常获取到。...组件代码: <router-link to="/" slot=...$refs.hotComment.height; console.log(this.hotCommentScrollTop); }, } } 组件related.vue

    2.2K40

    React进阶(6)-react-redux使用

    前言 撰文:川川 您将在本文当中学习到 react-redux是什么,解决什么问题 UI组件以及容器组件 react-redux两个重要API,Provider以及connect mapStateToProps...等),使用它可以更好组织和管理我们代码,遵循一定组件拆分规范,React更方便使用Redux 关系: 它不是必须,实际项目中,可选用.是使用Redux还是使用react-redux,取决于你自己...这样react任何组件都可以通过context获取store 只要被这个 Provider组件包裹了,那么它内部组件就有能力接收到store,内部组件都有能力获取store数据 这样也就意味着我们可以在任何一个组件里利用...综归来说, connect做了两件事情: 把store状态转换为内层UI组件(傻瓜组件)props 把内层UI组件(无状态组件)用户触发动作转化为派送个store动作,前者(mapStateToProps...mapStateToProps会订阅 Store,每当 state更新时候,就会自动执行,重新计算 UI 组件参数,从而触发 UI 组件重新渲染

    2K10

    React进阶(6)-react-redux使用

    image.png 前言 您将在本文当中学习到 react-redux是什么,解决什么问题 UI组件以及容器组件 react-redux两个重要API,Provider以及connect mapStateToProps...,遵循一定组件拆分规范,React更方便使用Redux 关系: 它不是必须,实际项目中,可选用.是使用Redux还是使用react-redux,取决于你自己,项目组成员熟悉程度,适合自己才是最好...react任何组件都可以通过context获取store 只要被这个 Provider组件包裹了,那么它内部组件就有能力接收到store,内部组件都有能力获取store数据 这样也就意味着我们可以在任何一个组件里利用...综归来说, connect做了两件事情: 把store状态转换为内层UI组件(傻瓜组件)props 把内层UI组件(无状态组件)用户触发动作转化为派送个store动作,前者(mapStateToProps...mapStateToProps会订阅 Store,每当 state更新时候,就会自动执行,重新计算 UI 组件参数,从而触发 UI 组件重新渲染

    2.2K00

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

    组件之间传值组件组件传值 组件中用标签属性=形式传值 组件中使用props来获取值组件组件传值 组件传递一个函数 组件中用props来获取传递函数,然后执行该函数...执行函数时候把需要传递值当成函数实参进行传递兄弟组件之间传值 利用组件 先把数据通过 【组件】===》【组件】 然后在数据通过 【组件】===〉【组件】 消息订阅 使用PubSubJs...mapStateToProps(state,ownProps)带有两个参数,含义是∶state-store管理全局状态对象,所有都组件状态数据都存储该对象。...componentWillReceiveProps初始化render时候不会执行,它会在Component接受到新状态(Props)时被触发,一般用于组件状态更新时组件重新渲染。...用法:组件定义getChildContext方法,返回一个对象,然后它组件就可以通过this.context属性来获取import React,{Component} from 'react'

    73050
    领券