React:踩坑记

作者: SwiftBirds | 来源:发表于2019-08-14 11:05 被阅读0次

持续更新中。。。。。。

组件销毁坑

报错信息

问题描述.PNG

需求是点击左上角的关闭按钮,注销本次的登录信息,结果出现以下报错信息

Can't perform a React state update on an unmounted component

大致意思就是:不能在组件销毁后设置state,防止出现内存泄漏的情况。

问题分析

出现以上情况是因为:该组件(header)中设置了一个定时器,并将该定时器通过setState绑定到了state中。而header组件中的时间显示依赖于state。因此只要定时器存在,就会一直更新组件的state。当销毁组件的时候,state仍然因为定时器的存在在不停的更新,React为了防止内存泄漏,会阻止注销操作并报错。

解决方法

应该在组件销毁之前清除所有的定时器(以及异步方法),具体实现是在componentWillUnmount中进行

componentWillUnmount() {
    clearTimeout(this.timer);
    this.setState = (state,callback) => {
        return ;
    }
}

setState异步坑

问题描述

setState坑.PNG setState坑2.PNG

需求是点击第一幅图的表格中选中行,然后点击详情页面按钮,会打开一个新的窗口,并将在第一幅图选中的信息展示在新窗口中(第二幅图)。

选中的信息会首先通过state存进redux中,该state值已通过sessionStorage本地存储进浏览器,防止页面刷新导致redux中存储的state值初始化。

结果信息并未准确传递过来,而是显示的上一个state值(即上一次点击选中的行信息)。

问题分析

出现该问题是因为:点击某一行时,先是在onRow的onClick回调函数中,通过this.setState将该行信息写进组件的state中,然后通过dispatch将state值存入redux中,但是因为this.setState是异步的,导致state未更新完就dispatch了,因此打开的新页面显示的是上次的状态值

解决方法

setState本身在第二个参数中提供过了回调方法,当state值更新完毕后,会调用第二个参数。因此可以设置第二个参数,做到把异步变同步

// 选择栏刷新状态 onRow中的onClick定义的是onRowClick
onRowClick = (record, key) => {
    let selectKey = [key];
    this.setState({
        selectedRowKeys: selectKey,
        selectedItem: record,
    },() => this.props.orderShow(this.state.selectedItem))
}

装饰器报错坑

问题描述

使用最新的create-react-app脚手架生成的项目,使用装饰器时,VSCode会出现红色的下划线。运行项目后浏览器会出现报错信息

解决方法

安装插件消除报错

  1. 需要安装 @babel/plugin-proposal-decorators
npm install @babel/plugin-proposal-decorators --save --dev

2.添加babel配置

"babel": {
    "plugins": [
      [
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ]
    ],
    "presets": [
      "react-app"
    ]
  },

更改VSCode设置去除红色下划线

在编辑器中左下角找到齿轮按钮,点击按钮找到,找到设置。在编辑界面输入experimental decorators,将如图选项打钩即可。


去除VScode装饰器红色下划线.png

相关文章

  • 原生App植入React Native 踩坑记

    原生App植入React Native 踩坑记 为什么我踩坑了有一个需求要去可以在当前工程的feature/RN ...

  • React Native WebView踩坑记

    React Native WebView踩坑记 在使用React Native开发应用时,有些第三方的页面需要在W...

  • 【react native】 tab导航栏吸顶 能保持每个ta

    如图: 首先我的tab切换用的react-native-scrollable-tab-view 踩坑记: 方案1:...

  • react 踩坑记

    预览权限不能编辑 项目中是个图,如果控制里面的节点很麻烦,那么久想办法遮罩,最简单的方式就是使用伪类,但是伪类用j...

  • React:踩坑记

    持续更新中。。。。。。 组件销毁坑 报错信息 需求是点击左上角的关闭按钮,注销本次的登录信息,结果出现以下报错信息...

  • react 踩坑记

    1. react 中展示svg 最终效果展示

  • 我的前端笔记

    目录 react 小程序 vue typescript 经验(踩坑) react useMemo 和 useCal...

  • APlayer音乐播放器

    Hexo 添加APlayer音乐播放器react npm插件推荐音乐外链生成踩坑记--hexo中加入音乐[ Lea...

  • React Native踩坑记

    导航栏 react-navigation实现页面导航布局效果 博客地址(有演示和讲解) 图标库 需要先下载 rnp...

  • react native 踩坑记

    按照官网(reactNative中文网)好不容易搭好mac环境,高高兴兴在终端输入“react-native ru...

网友评论

    本文标题:React:踩坑记

    本文链接:https://www.haomeiwen.com/subject/rltgjctx.html