首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >修复此react内存泄漏

修复此react内存泄漏
EN

Stack Overflow用户
提问于 2020-12-02 21:25:54
回答 1查看 201关注 0票数 0

我需要修复我的应用程序中的内存泄漏,但我不确定如何做。我有一个使用模式的组件,当我添加一个项目时,我得到了错误。这个模式是可重用的,我也在其他组件中使用它。这是主要组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { Card, Select, Form, Button } from 'antd';
import Table from 'components/Table';
import Modal from '../Modal';

import styles from '../index.module.scss';

const { Item } = Form;
const { Option } = Select;

const PersonForm = ({ details, form }) => {
  const [modalVisible, setModalVisible] = useState(false);

  const [name, setName] = useState(
    details?.name ? [...details?.name] : []
  );

  useEffect(() => {
    form.setFieldsValue({
 
      name: name || [],
    });
  }, [form, details, name]);

  const addName = values => {
    setName([...name, values]);
    setModalVisible(false);
  };

  const removeName = obj => {
    setName([...name.filter(i => i !== obj)]);
  };

  const cancelModal = () => {
    setModalVisible(false);
  };

  return (
    <div>

      <Card
        title="Names
        extra={
          <Button type="solid" onClick={() => setModalVisible(true)}>
            Add Name
          </Button>
        }
      >
        <Table
          tableData={name}
          dataIndex="name"
          removeName={removeName}
        />
      </Card>

      <Item name="name">
        <Modal
          title="Add Name"
          fieldName="name"
          onSubmit={addName}
          visible={modalVisible}
          closeModal={cancelModal}
        />
      </Item>
    </div>
  );
};

PersonForm.propTypes = {
  details: PropTypes.instanceOf(Object),
  form: PropTypes.instanceOf(Object),
};

PersonForm.defaultProps = {
  form: null,
  details: {},
};

export default PersonForm;

这是模态组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import PropTypes from 'prop-types';
import { Input, Form } from 'antd';
import Modal from 'components/Modal';
import LocaleItem from 'components/LocaleItem';

const { Item } = Form;

const FormModal = ({ visible, closeModal, onSubmit, fieldName, title }) => {
  const [form] = Form.useForm();

  const layout = {
    labelCol: { span: 8 },
    wrapperCol: { span: 15 },
  };

  const addItem = () => {
    form
      .validateFields()
      .then(values => {
        onSubmit(values, fieldName);
        form.resetFields();
        closeModal(fieldName);
      })
      .catch(() => {});
  };

  const canceledModal = () => {
    form.resetFields();
    closeModal(fieldName);
  };

  return (
    <Modal
      onSuccess={addItem}
      onCancel={canceledModal}
      visible={visible}
      title={title}
      content={
        <Form {...layout} form={form}>
          <Item
            name="dupleName"
            label="Name:"
            rules={[
              {
                required: true,
                message: 'Name field cannot be empty',
              },
            ]}
          >
            <Input placeholder="Enter a name" />
          </Item>
        </Form>
      }
    />
  );
};

FormModal.propTypes = {
  visible: PropTypes.bool.isRequired,
  closeModal: PropTypes.func.isRequired,
  onSubmit: PropTypes.func.isRequired,
  fieldName: PropTypes.string.isRequired,
  title: PropTypes.string.isRequired,
};

FormModal.defaultProps = {};

export default FormModal;

在模式中添加项目时,我在测试文件中遇到内存泄漏。谁能指出为什么会发生这种情况,以及如何解决这个问题?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 08:15:14

addItem函数中删除closeModalform.resetFields

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const addItem = () => {
    form
      .validateFields()
      .then(values => {
        onSubmit(values, fieldName); // when this onSubmit resolves it closes the modal, therefor these two lines below will be executed when component is unmounted, causing the memory leak warning
        form.resetFields();
        closeModal(fieldName);
      })
      .catch(() => {});
  };

// instead maybe just:

const [form] = Form.useForm();

<Modal onOk={form.submit}>
  <Form form={form}>
    <Form.Item name="foo" rules={[{ required: true }]}>
      <Input />
    </Form.Item>
  </Form>
</Modal>

而且,据我所知,你不需要调用form.validateFields,因为如果在Form.Item中设置了rules,Ant Design的表单就会自动调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65116372

复制
相关文章
Pandas 查找,丢弃列值唯一的列
数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中列值唯一的列,简言之,就是某列的数值除空值外,全都是一样的,比如:全0,全1,或者全部都是一样的字符串如:已支付,已支付,已支付…
萝 卜
2022/05/12
5.7K0
Pandas 查找,丢弃列值唯一的列
Pandas重复值处理
import pandas as pd #生成数据 data1,data2,data3,data4=['a',3],['b',2],['a',3],['c',2] df=pd.DataFrame([data1,data2,data3,data4],columns=['col1','col2']) print(df) col1 col2 0 a 3 1 b 2 2 a 3 3 c 2 #判断数据 isDuplicated=df.duplicat
hankleo
2020/09/17
7860
python 使用pandas 去除csv重复项
subset : column label or sequence of labels, optional 用来指定特定的列,默认所有列 keep : {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项 inplace : boolean, default False 是直接在原来数据上修改还是保留一个副本
kirin
2021/04/19
5.5K0
python 使用pandas 去除csv重复项
python | pandas 改变列的位置、填充缺失值
本期的文章源于工作中,需要固定label的位置,便于在spark模型中添加或删除特征,而不影响模型的框架或代码。 spark的jupyter下使用sql 这是我的工作环境的下情况,对你读者的情况,需要具体分析。 sql = ''' select * from tables_names -- hdfs下的表名 where 条件判断 ''' Data = DB.impala_query(sql) -- 是DataFrame格式 **注意:**DB是自己写的脚本文件 改变列的
努力在北京混出人样
2019/02/18
4.9K0
python | pandas 改变列的位置、填充缺失值
本期的文章源于工作中,需要固定label的位置,便于在spark模型中添加或删除特征,而不影响模型的框架或代码。 spark的jupyter下使用sql 这是我的工作环境的下情况,对你读者的情况,需要具体分析。 sql = ''' select * from tables_names -- hdfs下的表名 where 条件判断 ''' Data = DB.impala_query(sql) -- 是DataFrame格式 **注意:**DB是自己写的脚本文件 改变列的位置 前
努力在北京混出人样
2018/05/14
5.3K0
Pandas基础:查找与输入最接近的值
有时候,我们试图使用一个值筛选数据框架,但是这个值不存在,这样我们会接收到一个空的数据框架,这不是我们想要的。我们想要的是,在数据框架中找到与这个输入值最接近的值。
fanjy
2022/06/04
3.9K0
Pandas基础:查找与输入最接近的值
pandas’_pandas 删除列
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
2.7K0
pandas’_pandas 删除列
查找-散列查找
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。
全栈程序员站长
2022/08/28
1.4K0
查找-散列查找
使用pandas筛选出指定列值所对应的行
该方法其实就是找出每一行中符合条件的真值(true value),如找出列A中所有值等于foo
星星在线
2020/05/22
19.2K0
删除重复值,不只Excel,Python pandas更行
在Excel中,我们可以通过单击功能区“数据”选项卡上的“删除重复项”按钮“轻松”删除表中的重复项。确实很容易!然而,当数据集太大,或者电子表格中有公式时,这项操作有时会变得很慢。因此,我们将探讨如何使用Python从数据表中删除重复项,它超级简单、快速、灵活。
fanjy
2022/04/13
6.1K0
删除重复值,不只Excel,Python pandas更行
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
8990
【Python】基于某些列删除数据框中的重复值
Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。
阿黎逸阳
2020/09/08
20.7K0
【Python】基于某些列删除数据框中的重复值
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.2K0
散列查找
用过Excel,就会获取pandas数据框架中的值、行和列
至此,我们已经学习了使用Python pandas来输入/输出(即读取和保存文件)数据,现在,我们转向更深入的部分。
fanjy
2021/11/29
19.3K0
用过Excel,就会获取pandas数据框架中的值、行和列
【Python】基于多列组合删除数据框中的重复值
最近公司在做关联图谱的项目,想挖掘团伙犯罪。在准备关系数据时需要根据两列组合删除数据框中的重复值,两列中元素的顺序可能是相反的。
阿黎逸阳
2020/09/08
14.8K0
python删除重复值、排序、查找最多元素等操作
python删除重复值、排序、查找最多元素等操作 1、删除重复值、主要是列表和集合操作 2、关于排序,主要是对列表、元组、多重列表、集合以及对象排序 3、查找列表中出现最多的元素 # 删除可散列对象重复值,按集合规则顺序排序 def delrepdata(items): return set(items) # 删除可散列对象重复值,元素显示顺序不变 def delrepdatawithnochangeorder(items): datas=set() for item in ite
python与大数据分析
2022/03/11
8070
pandas处理缺失值的函数_pandas填充缺失值
df.dropna()函数用于删除dataframe数据中的缺失数据,即 删除NaN数据.
全栈程序员站长
2022/09/30
2K0
PP-数据建模:明明删除了重复项,为什么还是说有重复值?
最近,有朋友在用Power Pivot构建表间关系的时候,出现了一个问题:明明我已经删除了重复项,但构建表间关系的时候,还是说我两个表都有重复的数据!结果表间关系建立不起来!
大海Power
2021/08/30
3.7K0
Access重复项查询
大家好上节介绍了汇总查询,继续介绍选择查询中的重复项查询和不匹配项查询,这两种查询都可以在查询向导中创建,本节主要介绍重复项查询。
无言之月
2020/06/02
1.8K0
Access重复项查询
使用Pandas实现1-6列分别和第0列比大小得较小值
前几天在Python白银交流群【星辰】问了一个pandas处理Excel数据的问题,提问截图如下:
Python进阶者
2023/03/02
1.2K0
使用Pandas实现1-6列分别和第0列比大小得较小值

相似问题

Java枚举与静态常量

92

静态断言检查静态常量类数据成员?

11

静态断言枚举是某种基础类型。

10

如何静态地断言枚举元素的值?

56

循环通过常量枚举#定义

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文