Reactjs 遇到:只能在函数组件的主体内部调用挂钩。这可能是由于以下原因之一

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

我正在使用React和Konva.js创建一个项目,但遇到了“错误:钩子调用无效。钩子只能在函数组件主体内部调用。这可能是由于以下原因之一: 1.React和渲染器的版本可能不匹配(例如React DOM) 2.你可能违反了钩子的规则 3.同一应用程序中可能有多个React副本

我使用的代码是:

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();