错误:元素不可分配给反应中的类型字符串

Posted

技术标签:

【中文标题】错误:元素不可分配给反应中的类型字符串【英文标题】:Error: element is not assignable to type string in react 【发布时间】:2020-09-19 02:22:00 【问题描述】:

我得到的输出是带有 html 标签的;因此我使用了 dangerouslySetInnerHTML 来避免这种情况,之后我收到错误“Type ' contents: Element; ' is not assignable to type 'string'。”

我的反应代码如下:

import * as React from 'react';
import  RouteComponentProps  from 'react-router';

interface FetchImageDataState 
imageList: ImageData[];
loading: boolean;


export class OurTeam extends React.Component<RouteComponentProps<>, FetchImageDataState> 
constructor() 
    super();
    this.state =  imageList: [], loading: true ; //initialize to default

    fetch('api/Home/ourTeam')
        .then(response => response.json() as Promise<ImageData[]>)
        .then(data => 
            this.setState( imageList: data, loading: false );
        );





public render() 

    let contents = this.state.loading ? <p><em>Loading...</em></p> : this.renderImageTable(this.state.imageList);
    let body =  contents ;
    return <div>
        <h1>Team</h1>

        <div dangerouslySetInnerHTML= __html: body  />
            </div>;


private renderImageTable(imageList: ImageData[]) 
    return <div className='table'>
        imageList.map(x =>
            <div key=x.byteData >[x]</div>)
    </div>;




export class ImageData 
byteData: string = "";

如果不使用 dangerouslySetInnerHTML,代码的输出是带有 html 标签的所需文本;并且还显示了图像标签而不是图像。详细的错误是: [at-loader] 中的错误 ./ClientApp/components/OurTeam.tsx:41:18 TS2322:类型 ' dangerouslySetInnerHTML: __html: 内容:元素; ; ; ' 不可分配给类型 'HTMLProps'。 属性“dangerouslySetInnerHTML”的类型不兼容。 输入 ' __html: 内容:元素; ; ' 不可分配给类型 ' __html: string; |不明确的'。 输入 ' __html: 内容:元素; ; ' 不可分配给类型 ' __html: string; '。 属性“__html”的类型不兼容。 类型'内容:元素; ' 不可分配给类型 'string'。

我是新手,请帮忙解决问题。

【问题讨论】:

【参考方案1】:

您似乎比它应该更复杂,下面的代码应该可以正常工作。使用三元运算符来检查 loading 是否为真并基于此呈现 html 或 JSX,并且最好在组件挂载时进行调用

import React,Fragment from 'react';   
export class OurTeam extends Component 
   constructor() 
    super();
    this.state =  imageList: [], loading: true ; //initialize to default



  componentDidMount()
    fetch('api/Home/ourTeam')
        .then(response => response.json())
        .then(data => 
            this.setState( imageList: data, loading: false );
        ).catch(err=>
         console.log(err);
         ;
  


 render() 
    return (<div>
        <h1>Team</h1>
      this.state.loading ?
        <Fragment>
         <p><em>Loading...</em></p>
        </Fragment>  
        :
       <Fragment>
        <div className='table'>
         this.state.imageList.map(x =>
             <div key=x.byteData >[x]</div>)
           </div>
      </Fragment>);

【讨论】:

嗨 Abdullah - 我将不得不使用 ImageData 类从作为 Asp.net 核心的服务器端获取数据.. 似乎是什么问题,你可以像在OurTeam Class 中那样做 问题是输出带有html标签;我想要它没有标签......例如输出是 xyz 而不是 xyz 的粗体值 之前我将值作为字符串传递,我将其更改为传递 Json 参数;但不幸的是,不能作为文本值和图像的单独值传递,因为我传递的字符串/json 如下所示。此数据显示为纯文本,这是问题所在。如果您可以指导一些替代解决方案,请帮助我。 Ashok

123123123 ashok@test.com

..... .. 它正在工作;我所做的更改是: imageList.map((x,index) => ) convertToHTML(x) return __html: x ; 感谢阿卜杜拉一直以来的支持

以上是关于错误:元素不可分配给反应中的类型字符串的主要内容,如果未能解决你的问题,请参考以下文章

反应类型错误“不可分配给'从不'类型的参数”

如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。

使用反应成帧器类型'()=> void'的打字稿错误不可分配给类型'未定义'

打字稿错误:类型 'string' 不可分配给类型 '"allName" | `allName.$number.nestedArray`' 在反应钩子形式

这个错误说明了啥?类型“ParsedQs”不可分配给类型“字符串”

NestJS Postgres Prisma - 错误类型'字符串'不可分配给参数类型'TemplateStringsArray | Sql'