2021-06-01 react redux-mobx 数据无变化

项目场景:

react antd-Tabs mobx
更改标签页内数据
需求:只对当前需要的指定页面进行刷新,而不会在点击切换其他页面时不进行刷新
在这里插入图片描述


问题描述:

redux或mobx等,仓库内值发生更改,但标签页页面无变化


原因分析:

mobx无加入observer :
缓存机制导致仓库值更改,标签页页面数据无变化


解决方案:

1.设置状态值,在标签页页面外部触发按钮,更改状态值将页面进行强制刷新(无法进行强制刷新,原因是有缓存无法识别状态值,从而进行刷新
2.对antd-Tabs组件进行强制刷新

// An highlighted block
 <Tabs
        type="editable-card"
        onChange={this.onChange}
        activeKey={activeKey}
        onEdit={this.onEdit}
      >
        {panes.map(pane => (
          <TabPane tab={pane.title} key={pane.key} closable={pane.closable}>
          //切换选中的标签页的key值activeKey ,相等于 渲染到这个页面(pane.content)的key值
            {activeKey === pane.key && pane.content}
          </TabPane>
        ))}
 </Tabs>

可以进行强制刷新,但这样就失去的标签页的本质意义(使用标签页就是为了在切换页面时,利用他的缓存机制)
需求:只对当前需要的指定页面进行刷新,而不会在点击切换其他页面时不进行刷新
3.mobx 值不改变其实是没有添加(observable):

// mobx 仓库的值
class AppStore {
	@observable
	data={
	}
	}
// 添加observer 
import { observer } from 'mobx-react';
............
export default observer(组件名);

observer 函数/装饰器可以用来将 React 组件转变成响应式组件。 它用 mobx.autorun 包装了组件的 render 函数以确保任何组件渲染中使用的数据变化时都可以强制刷新组件。observer 是由单独的 mobx-react 包提供的。

小贴士: 当 observer 需要组合其它装饰器或高阶组件时,请确保 observer 是最深处(第一个应用)的装饰器,否则它可能什么都不做。

纠错
注意,使用 @observer 装饰器是可选的,它和 observer(class Timer … { })或observer(组件名) 达到的效果是一样的。
observer 详解

额外(按钮触发刷新):在这里插入图片描述

// mobx 仓库的值
class AppStore {
	@observable
	data={
	}
	}
// 更改仓库值
store.setRefresh({
          name: '<NewForm/>', //设置当前标签页key为 '<NewForm/>',
          bool: true
        })
// An highlighted block
 setRefresh = () => {
    store.setRefresh({
      name: store.refresh.name,
      bool: false
    })
    console.log(store.refresh);
    setTimeout(() => {
      store.setRefresh({
        name: store.refresh.name,
        bool: true
      })
      console.log(store.refresh);
    }, 200);
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值