【问题标题】:onClick not assignable to type 'IntrinsicAttributes' error in TypeScript ReactonClick 不能分配给 TypeScript React 中的类型“IntrinsicAttributes”错误
【发布时间】:2021-03-18 21:16:51
【问题描述】:

我有一个组件的代码:

Feedback.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;

FeedbackButton 组件如下所示:

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;

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

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

【问题讨论】:

    标签: reactjs typescript react-hooks tsx


    【解决方案1】:
    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>
      );
    }
    

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

    【讨论】:

    • 非常感谢。这是处理此问题的好方法吗,或者您认为是否有处理此类事情的最佳实践方法
    • 当我的项目中有组件时,我会尽量保持小道具,通常会创建一个名为Props 的接口,除非您正在创建一个可以以多种不同方式使用的库,这种情况下你可能会从 Button Props 扩展你的 Props 接口,它看起来像这样React.DetailedHTMLProps&lt;React.ButtonHTMLAttributes&lt;HTMLButtonElement&gt;, HTMLButtonElement&gt;。当您从按钮道具扩展时,您还需要将这些道具向下传递给按钮。你可以在 react typings 中找到更多关于 props 的信息,希望对您有所帮助
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 2021-05-31
    • 2021-10-29
    • 2021-12-03
    • 2018-06-22
    • 2022-06-12
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多