TypeScript React 中 onClick 无法分配给类型“IntrinsicAttributes”错误

ero*_*msr 6 typescript reactjs tsx react-hooks

我有一个组件的代码:

反馈.tsx

import React, { useState } from 'react';
import './Feedback.css';

import FeedbackButton from './FeedbackButton';

function Feedback() {
  const [isOpen, setIsOpen] = useState<boolean>(false)

  return (
    <div className="Feedback">
      <FeedbackButton onClick={() => setIsOpen(!isOpen)} />
    </div>
  );
}

export default Feedback;
Run Code Online (Sandbox Code Playgroud)

FeedbackButton组件如下所示:

反馈按钮.tsx

import React from 'react';
import feedbackicon from './feedback.svg';
import './Feedback.css';

function FeedbackButton() {
  return (
    <button className="Feedback-button" type="button">
      <img src={feedbackicon} className="Feedback-button-icon" alt="feedback" />
    </button>
  );
}

export default FeedbackButton;
Run Code Online (Sandbox Code Playgroud)

在线<FeedbackButton onClick={() => setIsOpen(!isOpen)} />我收到错误Type '{ onClick: () => void; }' is not assignable to type 'IntrinsicAttributes'. Property 'onClick' does not exist on type 'IntrinsicAttributes'.

我搜索了它并尝试使用FunctionalComponent修复它,但我得到了同样的错误。我怎样才能使这个 onClick 与 useState 一起工作?

ton*_*kai 10

function FeedbackButton(props:{onClick:()=>void}) {
  return (
    <button className="Feedback-button" type="button" onClick={props.onClick}>
      <img src={feedbackicon} className="Feedback-button-icon" alt="feedback" />
    </button>
  );
}
Run Code Online (Sandbox Code Playgroud)

像这样的东西应该更适合你,你可以将类型从按钮 onclick 复制到你的道具,并在需要时更好地打字