无法读取未定义 Konva.js 的 属性 'apply'
Cannot read property 'apply' of undefined Konva.js
我正在尝试使用方法 find
查找 object。它只是代码的一部分,只是为了演示问题。一般来说,我需要从 Konva
框架的 Shapes
数组中找到 object。我在渲染功能组件后使用 refs 得到它。
import React, { useState, useEffect, useRef } from "react";
import Konva from "konva";
import { Stage, Layer, Text, Circle } from "react-konva";
import { ArrowComp } from "./Arrow";
import { useInterval } from "../hooks/useInterval";
const Graph = props => {
const [data, setData] = useState({
circles: ConvertMatrix(matrix).circles,
});
const circles = ref.current.find(".circle");
const stageRef = useRef();
useEffect(() => {
const circles = stageRef.current.find(".circle");
const finded = circles.find((circle) => circle.attrs.radius < 50)
}, []);
return (
<Stage
width={window.innerWidth}
height={window.innerHeight}
className="container"
ref={stageRef}
>
<Layer>
<Circle
shadowBlur={10}
x={150}
y={200}
radius={circle.r || 40}
fill="yellow"
name={"circle"}
id={1}
/>
<Circle
shadowBlur={10}
x={150}
y={150}
radius={40}
fill="yellow"
name={"circle"}
id={2}
/>
</Layer>
</Stage>
);
};
ReactDOM.render(<Graph />, document.querySelector("#app"))
我在 lib 中遇到错误。是konva框架库吗?我怎样才能通过其他方式从数组中找到元素?
16 | var len = this.length, i;
17 | var args = [].slice.call(arguments);
18 | for (i = 0; i < len; i++) {
> 19 | this[i][methodName].apply(this[i], args);
| ^ 20 | }
21 | return this;
22 | };
TypeError: 无法读取未定义的 属性 'apply'
Collection。 [作为查找]
这是我在 StackOwerflow 上的第一个问题,很抱歉这个问题的格式不完全。
我举了个例子here
UPD:使用 findIndex
解决了问题并通过 circles[index] 获得了价值。但是还剩 1 个问题:是不是库(框架)的 bug?
您的 circles
变量不是数组。 stage.find(selectors)
returns一个Konva.Collection。它的工作方式与 Array 有点不同。如果你想要一个数组,只需使用:
circles.toArray().find((circle) => circle.radius() < 50);
我正在尝试使用方法 find
查找 object。它只是代码的一部分,只是为了演示问题。一般来说,我需要从 Konva
框架的 Shapes
数组中找到 object。我在渲染功能组件后使用 refs 得到它。
import React, { useState, useEffect, useRef } from "react";
import Konva from "konva";
import { Stage, Layer, Text, Circle } from "react-konva";
import { ArrowComp } from "./Arrow";
import { useInterval } from "../hooks/useInterval";
const Graph = props => {
const [data, setData] = useState({
circles: ConvertMatrix(matrix).circles,
});
const circles = ref.current.find(".circle");
const stageRef = useRef();
useEffect(() => {
const circles = stageRef.current.find(".circle");
const finded = circles.find((circle) => circle.attrs.radius < 50)
}, []);
return (
<Stage
width={window.innerWidth}
height={window.innerHeight}
className="container"
ref={stageRef}
>
<Layer>
<Circle
shadowBlur={10}
x={150}
y={200}
radius={circle.r || 40}
fill="yellow"
name={"circle"}
id={1}
/>
<Circle
shadowBlur={10}
x={150}
y={150}
radius={40}
fill="yellow"
name={"circle"}
id={2}
/>
</Layer>
</Stage>
);
};
ReactDOM.render(<Graph />, document.querySelector("#app"))
我在 lib 中遇到错误。是konva框架库吗?我怎样才能通过其他方式从数组中找到元素?
16 | var len = this.length, i;
17 | var args = [].slice.call(arguments);
18 | for (i = 0; i < len; i++) {
> 19 | this[i][methodName].apply(this[i], args);
| ^ 20 | }
21 | return this;
22 | };
TypeError: 无法读取未定义的 属性 'apply' Collection。 [作为查找]
这是我在 StackOwerflow 上的第一个问题,很抱歉这个问题的格式不完全。 我举了个例子here
UPD:使用 findIndex
解决了问题并通过 circles[index] 获得了价值。但是还剩 1 个问题:是不是库(框架)的 bug?
您的 circles
变量不是数组。 stage.find(selectors)
returns一个Konva.Collection。它的工作方式与 Array 有点不同。如果你想要一个数组,只需使用:
circles.toArray().find((circle) => circle.radius() < 50);