正确卸载 React 组件

m_callens

问题:为什么在组件不再由其父级渲染后会抛出此警告?我是否缺少卸载该组件所需要做的事情,而不仅仅是过滤作为 props 向下传递到组件层次结构的商店状态?

我经常看到这种情况,但解决方案通常涉及从组件取消订阅 redux 存储;然而,这个组件并没有连接到商店,只是顶级容器。

  • remove操作只是过滤存储状态以删除负责当前组件的数组元素。
  • refresh动作目前只是在子组件中模拟 UI 动画事件。
  • 仅当我Feed在调用refresh操作删除组件时才会抛出警告

警告:setState(...):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了 setState()。这是一个无操作。请检查 Feed 组件的代码。

// @flow
// Feed.js

import React, { Component } from 'react'
import type { FeedType, FeedState } from '../../utils/types'
import { remove, refresh } from '../../actions/redux-actions'
import RssEventList from '../containers/RssEventList'

const cardColors: Array<string> = ['red', 'orange', 'olive', 'green', 'blue', 'yellow']

export default class Feed extends Component {
  props: FeedType
  state: FeedState

  constructor(props: *) {
    super(props)

    this.state = {
      reloading: false
    }
  }

  refresh() {
    this.setState({ reloading: true })
    setInterval(() => this.setState({ reloading: false }), 4000)
    this.props.dispatch(refresh(this.props.link))
  }

  remove() {
    this.props.dispatch(remove(this.props.link))
  }

  render() {
    const color: string = cardColors[Math.floor(Math.random() * cardColors.length)]

    return (
      <div className={`ui ${color} card`}>
        <div className="content">
          <div className="ui header">
            {this.props.title}
            <a className="source link" href={this.props.link} target="_blank">
              <i className="linkify right floated icon"></i>
            </a>
          </div>
          <div className="meta">
            {this.props.description}
          </div>
        </div>
        <div className="content">
          <RssEventList reloading={this.state.reloading} events={this.props.feed} />
        </div>
        <div className="extra content">
          <span className="left floated" onClick={() => this.refresh()}>
            <i className="refresh icon"></i>
            Refresh
          </span>
          <span className="right floated" onClick={() => this.remove()}>
            <i className="cancel icon"></i>
            Remove
          </span>
        </div>
      </div>
    )
  }
}

如果有帮助,这里是组件层次结构图:

App (connected to store)
|- Header
|- FilterBar
|- FeedList
   |- Feed
      |- RssEventList
         |- RssEvent
   |- AddCard
达米安·勒鲁

问题是您没有在组件上存储间隔以在组件卸载时将其删除。因此,即使在卸载组件后,间隔仍将继续被调用。您需要使用以下命令将其删除clearInterval()

export default class Feed extends Component {
  refresh() {
    this.myInterval = setInterval(() => this.setState({ reloading: false }), 4000)
  }

  componentWillUnmount() {
    clearInterval(this.myInterval);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止React卸载组件

来自分类Dev

并行安装中的组件未正确卸载

来自分类Dev

如何删除/卸载嵌套的React组件

来自分类Dev

React Native:组件卸载时的动画

来自分类Dev

React:可变高度的组件的安装/卸载动画

来自分类Dev

无法卸载React组件,从父组件返回false

来自分类Dev

继承React组件的正确方法

来自分类Dev

正确的React组件命名规范

来自分类Dev

从React组件卸载时开始纯粹卸载条带

来自分类Dev

卸载组件

来自分类Dev

组件卸载后正确删除事件处理程序

来自分类Dev

当组件卸载时,React Native取消动画延迟

来自分类Dev

几秒钟后如何卸载或删除React组件?

来自分类Dev

使用React Hooks卸载组件时如何访问状态?

来自分类Dev

如何通过按键在React中安装/卸载组件?

来自分类Dev

无法对已卸载的组件useEffect执行React状态更新

来自分类Dev

React.js-高阶组件卸载无法正常工作

来自分类Dev

React Navigation:组件未在弹出或后退按钮上卸载 #5775

来自分类Dev

如何正确设置对React组件的引用?

来自分类Dev

在React中管理组件功能的正确方法

来自分类Dev

React:在卸载组件之后但在另一个组件安装之前运行异步功能

来自分类Dev

警告:无法在已卸载的组件上执行React状态更新。在功能组件中

来自分类Dev

是否应该在组件卸载中清除 React 组件方法引用?

来自分类Dev

React Spring“无法在已卸载的组件上执行React状态更新”

来自分类Dev

当使用react-router-dom匹配URL路径时,如何防止React组件卸载

来自分类Dev

在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

来自分类Dev

组件未卸载

来自分类Dev

延迟组件卸载

来自分类Dev

如何正确地对React组件进行单元测试?

Related 相关文章

  1. 1

    防止React卸载组件

  2. 2

    并行安装中的组件未正确卸载

  3. 3

    如何删除/卸载嵌套的React组件

  4. 4

    React Native:组件卸载时的动画

  5. 5

    React:可变高度的组件的安装/卸载动画

  6. 6

    无法卸载React组件,从父组件返回false

  7. 7

    继承React组件的正确方法

  8. 8

    正确的React组件命名规范

  9. 9

    从React组件卸载时开始纯粹卸载条带

  10. 10

    卸载组件

  11. 11

    组件卸载后正确删除事件处理程序

  12. 12

    当组件卸载时,React Native取消动画延迟

  13. 13

    几秒钟后如何卸载或删除React组件?

  14. 14

    使用React Hooks卸载组件时如何访问状态?

  15. 15

    如何通过按键在React中安装/卸载组件?

  16. 16

    无法对已卸载的组件useEffect执行React状态更新

  17. 17

    React.js-高阶组件卸载无法正常工作

  18. 18

    React Navigation:组件未在弹出或后退按钮上卸载 #5775

  19. 19

    如何正确设置对React组件的引用?

  20. 20

    在React中管理组件功能的正确方法

  21. 21

    React:在卸载组件之后但在另一个组件安装之前运行异步功能

  22. 22

    警告:无法在已卸载的组件上执行React状态更新。在功能组件中

  23. 23

    是否应该在组件卸载中清除 React 组件方法引用?

  24. 24

    React Spring“无法在已卸载的组件上执行React状态更新”

  25. 25

    当使用react-router-dom匹配URL路径时,如何防止React组件卸载

  26. 26

    在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

  27. 27

    组件未卸载

  28. 28

    延迟组件卸载

  29. 29

    如何正确地对React组件进行单元测试?

热门标签

归档