反应设置状态使用函数而不是像对象一样合并

发布于 2025-02-12 05:32:34 字数 1540 浏览 2 评论 0原文

每当更改MUI的Data Grid Pro列宽度时,都称之为此功能。我正在尝试从“参数”中捕获“字段”和“宽度”,并为更改宽度的所有列创建一系列对象。我的问题是,它只是不断添加相同的对象而不是合并它们。例如,在下面,我两次更改了“ Wave”列的宽度,然后将第二个更改添加到数组中。

我需要正确合并它们来正确

  const handleColumnSizeChange = useCallback(
    (params) => {
      setColumnDefinitions((columnDefinitions) => {
        return [
          ...columnDefinitions,
          { field: params.colDef.field, width: params.colDef.width },
        ];
      });
    },
    [columnDefinitions]
  );

  console.log(columnDefinitions);

更新: 我发现了。我认为仅在我以前的功能中使用差异就有一种更简单的方法。

 const handleColumnSizeChange = useCallback(
    (params) => {
      const { field, width } = params.colDef;

      const check = columnDefinitions.some((e) => e.field === field);

      if (check) {
        const updatedDefs = columnDefinitions.map((column) => {
          if (column.field === field) {
            return { ...column, width: width };
          }

          return column;
        });

        setColumnDefinitions(updatedDefs);
      } else {
        // setColumnDefinitions((columnDefinitions) => {
        //   return [...columnDefinitions, { field: field, width: width }];
        // });

        setColumnDefinitions([
          ...columnDefinitions,
          { field: field, width: width },
        ]);
      }
    },
    [columnDefinitions]
  );

This function is called whenever MUI's data grid pro column width has been changed. I am trying to capture the "field" and "width" from the "params" and create an array of objects for all the columns that had changed width. My issue is that it just keeps adding the same object instead of merging them. For instance below I changed the width of the "wave" column two times and it just added the second change to the array.

enter image description here

I need help merging them properly

  const handleColumnSizeChange = useCallback(
    (params) => {
      setColumnDefinitions((columnDefinitions) => {
        return [
          ...columnDefinitions,
          { field: params.colDef.field, width: params.colDef.width },
        ];
      });
    },
    [columnDefinitions]
  );

  console.log(columnDefinitions);

UPDATE:
I figured it out. I thought there was an easier way just using the spread in my previous function.

 const handleColumnSizeChange = useCallback(
    (params) => {
      const { field, width } = params.colDef;

      const check = columnDefinitions.some((e) => e.field === field);

      if (check) {
        const updatedDefs = columnDefinitions.map((column) => {
          if (column.field === field) {
            return { ...column, width: width };
          }

          return column;
        });

        setColumnDefinitions(updatedDefs);
      } else {
        // setColumnDefinitions((columnDefinitions) => {
        //   return [...columnDefinitions, { field: field, width: width }];
        // });

        setColumnDefinitions([
          ...columnDefinitions,
          { field: field, width: width },
        ]);
      }
    },
    [columnDefinitions]
  );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情独悲 2025-02-19 05:32:34
 const handleColumnSizeChange = useCallback(
(params) => {
  const { field, width } = params.colDef;

  const check = columnDefinitions.some((e) => e.field === field);

  if (check) {
    const updatedDefs = columnDefinitions.map((column) => {
      if (column.field === field) {
        return { ...column, width: width };
      }

      return column;
    });

    setColumnDefinitions(updatedDefs);
  } else {
    
    setColumnDefinitions((columnDefinitions) => {
      return [...columnDefinitions, { field: field, width: width }];
    });

  }
},
[columnDefinitions]

);

 const handleColumnSizeChange = useCallback(
(params) => {
  const { field, width } = params.colDef;

  const check = columnDefinitions.some((e) => e.field === field);

  if (check) {
    const updatedDefs = columnDefinitions.map((column) => {
      if (column.field === field) {
        return { ...column, width: width };
      }

      return column;
    });

    setColumnDefinitions(updatedDefs);
  } else {
    
    setColumnDefinitions((columnDefinitions) => {
      return [...columnDefinitions, { field: field, width: width }];
    });

  }
},
[columnDefinitions]

);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文