当前位置: 首页 > 知识库问答 >
问题:

Typescript使用道具对功能组件进行反应。儿童

蒋俊人
2023-03-14

我试图制作一个组件,当道具isLoading为true时,该组件将显示一个加载循环,否则将显示子组件。我想在其他类似的组件中使用该组件。。。

import Loading from './Loading.tsx'

...

const [isLoading,setLoading] = React.useState(false);

return (
<Loading isLoading={isLoading}>
     <div>this component will show when loading turns to true</div>
</Loading> );

我得到了脚本错误

Type '({ isLoading, color, children, }: PropsWithChildren<LoadingProps>) => Element | { children: ReactNode; }' is not assignable to type 'FunctionComponent<LoadingProps>'.

Type 'Element | { children: ReactNode; }' is not assignable to type 'ReactElement<any, any> | null'.
    Type '{ children: ReactNode; }' is missing the following properties from type 'ReactElement<any, any>': type, props, key  TS2322

有人能指出我做错了什么吗?


    import React, { FunctionComponent } from 'react';
    import { CircularProgress } from '@material-ui/core';

    type LoadingProps = {
        isLoading: boolean;
        color: 'primary' | 'secondary' | 'inherit' | undefined;
    };

    const Loading: FunctionComponent<LoadingProps> = (props) => {
    
        if(props.isLoading){
            return <CircularProgress color={props.color || 'primary'} />
        }
    
        return props.children;
    };

    export default Loading;

共有2个答案

田阳泽
2023-03-14

这是因为返回道具。儿童

您应该用一个片段包装它,如下所示:

const Loading: React.FC<LoadingProps> = (props) => {
return props.isLoading ? (
    <CircularProgress color={props.color || "primary"} />
  ) : (
    <>{props.children}</>
  );
};
易星宇
2023-03-14

建议(请参见此处)在使用React时显式定义孩子的类型。函数组件作为函数类型。

所以呢

type LoadingProps = {
    isLoading: boolean
    color: 'primary' | 'secondary' | 'inherit' | undefined
    children: React.ReactNode
}

这也将确保在返回时输入正确。

 类似资料:
  • 我有一个类扩展了React。组件类,我将为我希望接收的道具传递我自己的接口。问题是当我使用webstorm linter说有问题,指出类型“typeof SomeComponent”上不存在属性“propTypes”。 我不知道为什么会这样...... 的代码为 当我编写以下代码创建函数组件时,会引发类似的异常: 在本例中,使用

  • 我试图理解新的React钩子及其用例。 我的目标是一个单一的组成部分,计算起来,也每x滴答计数另一个计数器。 我使用useEffect和useState实现了它,主要有两个问题: 1。组件在调用超时之前卸载时发生内存泄漏(使用react router导航时) 2。该组件在每个刻度上渲染两次,因为useEffect和useState都会触发渲染。 我认为解决方案是使用useRef或usemo,但我还

  • 正如标题中所述,我想将react路由器道具和自定义道具导入到我的组件中。 我的路线看起来像这样: 在这里我得到这个错误:类型{}缺少以下属性从类型CompProps:名称,历史,位置,匹配 错误来自我的组件,如下所示: 我是TS的初学者,但我认为RouteComponentProps应该包含(名称、历史、位置)为什么TS会把错误推到我身上。将自定义道具和路由器道具传递给组件的最佳实践是什么?

  • 我对这个问题很疯狂... 首先,我对React还是新手,其次,在发布之前,我尝试过:在React router v4中将自定义道具传递给路由器组件,React子组件不接收道具 但是运气不好... 我试图实现的是简单地将路由添加到现有的React项目中。 例如,顶级(父级)类如下所示: 注意:错误位于属性“getProfiles”在类型“Readonly”上不存在 儿童班: } 所以我不知道如何传递

  • 问题内容: 随着React 中钩子的引入,现在的主要困惑是何时将函数组件与钩子和类组件一起使用,因为在钩子的帮助下,甚至可以在函数组件中获得和部分使用。所以,我有以下问题 钩子的真正优点是什么? 何时使用带有钩子的函数组件和类组件? 例如,带有钩子的功能组件不能像类组件那样帮助性能。他们没有执行就不能跳过重新渲染。还有其他原因吗? 提前致谢。 问题答案: 引入和其他特性(例如和)的思想是帮助减少必

  • 当设置组件的初始状态时,使用通过道具传入的数据,我是否应该创建一个新的对象,执行类似于... 或者这样做是安全的...

  • 问题内容: 我试图了解何时使用React功能组件和类,并从文档中阅读它们并没有真正详细介绍。当您希望类的特定功能构成组件时,能否给我下面的一些主要例子? 功能组件的功能较弱,但更简单,并且仅使用一个render()方法就类似于类组件。除非您需要仅在类中可用的功能,否则我们建议您改用功能组件。 问题答案: 您仅在以下情况下需要组件: 需要组件 状态 或 需要 生命周期方法 。例如等

  • 我在学反应。我读过一篇文章,建议我们使用函数组件,而不是扩展react.component的类,所以我跟着做了。我也使用箭头函数而不是函数关键字。即: 有没有一种方法可以使用setState()来代替setName()、setId()、…等?或者任何建议? 非常感谢!