typescript - 如何公开 props 类型并在样式化组件中使用它
问题描述
我很抱歉我的英语不好,我会尽力而为。
您好,我是 Styled 组件的新手。
我想改变按钮的样式并包装它。
但是当我试图将包装组件的 prop 传递给 Styled 组件时,我得到了一个类型错误。
我不知道我做错了什么。
下面是我的代码。
// Button/styles.ts
import React from 'react'
import styled from 'styled-components'
export const Button = styled.button<React.HTMLProps<HTMLButtonElement>>`
background-color: transparent;
border: 1px solid rgba(0, 0, 0, 0.23);
padding: 5px 15px;
border-radius: 4px;
&:focus {
outline: none;
}
&:focus-visible {
outline: none;
}
`
// Button/Button.ts
import React from 'react'
import * as Styles from './styles'
export type ButtonProps = React.HTMLProps<HTMLButtonElement>
const Button = (props: ButtonProps) =>
<Styles.Button {...props}/> // << TypeError!
export default Button
- - 编辑
解决方案
使用React.ComponentPropsWithoutRef<"button">
而不是React.HTMLProps<HTMLButtonElement>
.
HTMLProps
类型太宽。
https://react-typescript-cheatsheet.netlify.app/docs/advanced/patterns_by_usecase/
推荐阅读
- serial-port - 为什么 HAL_UART_Transmit_DMA() 不适用于 Nucleo F103RB 上的串行端口?
- sql - 相同的 SQL 查询在函数中显示不同的结果
- java - 谷歌代码样式格式在 Intellij 中奇怪的 maven pom
- laravel - 如何将 .sql 数据库添加到 Laravel 中的现有数据库?
- postgresql - 为什么即使没有在查询中使用,对带有 jsonb 列的表的 postgres 查询也很慢
- windows - 电源外壳。将多个文件夹的内容合并到一个文件夹中
- python - 如何将csv文件中的多行单词组合成一个列表?
- activemerchant - ActiveMerchant 使用 Cyber Source flex 代币进行支付
- java - 使用 Retrofit2 调用 API 时无法接收数据
- html - 从表单中的表中发布行模型数据(无 JS)