Reactjs 遇到:只能在函数组件的主体内部调用挂钩。这可能是由于以下原因之一
我正在使用React和Konva.js创建一个项目,但遇到了“错误:钩子调用无效。钩子只能在函数组件主体内部调用。这可能是由于以下原因之一: 1.React和渲染器的版本可能不匹配(例如React DOM) 2.你可能违反了钩子的规则 3.同一应用程序中可能有多个React副本 “ 我使用的代码是:Reactjs 遇到:只能在函数组件的主体内部调用挂钩。这可能是由于以下原因之一,reactjs,react-konva,Reactjs,React Konva,我正在使用React和Konva.js创建一个项目,但遇到了“错误:钩子调用无效。钩子只能在函数组件主体内部调用。这可能是由于以下原因之一: 1.React和渲染器的版本可能不匹配(例如React DOM) 2.你可能违反了钩子的规则 3.同一应用程序中可能有多个React副本 “ 我使用的代码是: import React from "react"; import { Rect, Transformer } from "react-konva"; const Rectangle = ({ sh
import React from "react";
import { Rect, Transformer } from "react-konva";
const Rectangle = ({ shapeProps, isSelected, onSelect, onChange }) => {
const shapeRef = React.useRef();
const trRef = React.useRef();
React.useEffect(() => {
if (isSelected) {
// we need to attach transformer manually
trRef.current.setNode(shapeRef.current);
trRef.current.getLayer().batchDraw();
}
}, [isSelected]);
return (
<React.Fragment>
<Rect
onClick={onSelect}
ref={shapeRef}
{...shapeProps}
draggable
onDragEnd={(e) => {
onChange({
...shapeProps,
x: e.target.x(),
y: e.target.y(),
});
}}
onTransformEnd={(e) => {
// transformer is changing scale
const node = shapeRef.current;
const scaleX = node.scaleX();
const scaleY = node.scaleY();
node.scaleX(1);
node.scaleY(1);
onChange({
...shapeProps,
x: node.x(),
y: node.y(),
width: node.width() * scaleX,
height: node.height() * scaleY,
});
}}
/>
{isSelected && <Transformer ref={trRef} />}
</React.Fragment>
);
};
export default Rectangle;
但我不确定这是否是问题请确保您的
react
和react konva
版本匹配。通常,只要升级到最新版本就足够了。确保您的react
和react konva
版本匹配。通常,只要升级到最新版本就足够了。确保您使用的是react和react的16.8.0或更高版本-dom@ShubhamKhatri,你好,Shubham,是的,我正在使用最新版本的react和react DOM。请运行npm ls react并确保您使用的是react@ShubhamKhatri,在我运行npm后,我得到react@16.13.1@用户13647380关于react konva
version如何?确保您使用的是react和react的16.8.0或更高版本-dom@ShubhamKhatri,你好,Shubham,是的,我正在使用最新版本的react和react DOM。请运行npm ls react并确保您使用的是react@ShubhamKhatri,在我运行npm后,我得到react@16.13.1@用户13647380关于react konva
version如何?
const shapeRef = React.useRef();
const trRef = React.useRef();