如何正确地做到这一点,以便在变换一个形状时,在 react-konva 中变换另一个形状?

how to do it correctly so that when transform one shape, transform another shape in react-konva?

我需要变换一个形状以同时变换另一个形状以填充空闲 space。 我怎样才能正确地做出反应? 现在我所做的根本无法正常工作,我不知道如何以不同的方式去做

演示:https://stackblitz.com/edit/vitejs-vite-q5jn1d?file=src/Template.jsx

您无需对 Konva 节点施展任何魔法,也无需手动触摸它们。只需使用您的反应状态即可。

onChange={(newAttrs) => {
  setTemplates((currTemplates) =>
    currTemplates.map((t) => {
      if (t.name === newAttrs.name) {
        return { anchors: t.anchors, ...newAttrs };
      } else if (t.name === 'vertical-p1') {
        return {
          ...t,
          height: newAttrs.y - 10,
        };
      } else if (t.name === 'vertical-p2') {
        return {
          ...t,
          y: newAttrs.height + 10,
          height: 600 - (newAttrs.height + 10),
        };
      }
    })
  );
}}

https://stackblitz.com/edit/vitejs-vite-ynemv6?file=src%2FApp.jsx

另外,你可以多提升自己的状态,减少可能的冲突。例如。而不是在您的州定义“矩形”。您可以只有 canvas 的 width/height 和分隔符的 y 位置。可以从状态计算形状的属性。