首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >样式-不使用类型withTheme的组件React.FC

样式-不使用类型withTheme的组件React.FC
EN

Stack Overflow用户
提问于 2019-10-24 13:06:30
回答 1查看 2.8K关注 0票数 5

我正在用React.FC类型记录构建一些组件,今天我在尝试使用样式组件中的withTheme自定义组件注入样式组件支持时发现了这个类型记录错误:

看来withTheme HOC只接受React.ComponentType作为参数,但是组件是使用React.FC (Functional )构建的。

有没有办法将React.FC转换为React.ComponentType

更新

完整的组成部分实现:

代码语言:javascript
复制
import React, { useEffect } from 'react'
import PropTypes from 'prop-types'
import { Reset, LoadingBarStyled, SpinnerContainer } from './Style'
import { withTheme } from 'styled-components'
import ScaleLoader from 'react-spinners/ScaleLoader'

export interface ILoadingBarComponent {
    progress: number
    appearance?: string
    onFinish(finished: Promise<string>): void
}

const LoadingBarComponent: React.FC<ILoadingBarComponent> = ({
    progress = 0,
    appearance = 'default',
    onFinish
}) => {
    useEffect(() => {
        if (progress >= 100 && onFinish) {
            onFinish(
                new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve('finished')
                    }, 800)
                })
            )
        }
    }, [progress, onFinish])
    return (
        <div className="loading-bar-component-module">
            <Reset />
            {progress > -1 && progress < 101 && (
                <>
                    <LoadingBarStyled progress={progress} appearance={appearance} />
                    <SpinnerContainer progress={progress}>
                        <ScaleLoader height={10} />
                    </SpinnerContainer>
                </>
            )}
        </div>
    )
}

LoadingBarComponent.propTypes = {
    progress: PropTypes.number.isRequired,
    appearance: PropTypes.string,
    onFinish: PropTypes.func.isRequired
}
export default withTheme(LoadingBarComponent)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-24 13:46:56

您需要向组件道具接口添加一个theme支柱:

代码语言:javascript
复制
interface Theme {}

export interface ILoadingBarComponent {
  progress: number
  appearance?: string
  onFinish(finished: Promise<string>): void
  theme: Theme
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58542056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档