【问题标题】:Property project is missing in type `{}` but required in Readonly<Props>类型“{}”中缺少属性项目,但在 Readonly<Props> 中是必需的
【发布时间】:2019-12-20 23:17:33
【问题描述】:

我正在尝试在 Assets.tsx 中导入 FirstTab 内容,就像 StackBlitz 编辑器代码 here 中的工作示例中所示。在编辑器示例中,FirstTab 组件被导入到index.tsx

我的Assets.tsx如下:

import React from "react";
import * as ReactDOM from "react-dom";
import JqxTabs from "jqwidgets-scripts/jqwidgets-react-tsx/jqxtabs";
import JqxGrid, {
  IGridProps,
  jqx
} from "jqwidgets-scripts/jqwidgets-react-tsx/jqxgrid";
;
declare global {
  // eslint-disable-next-line
  namespace JSX {
    interface IntrinsicElements {
      FirstTab: any;
    }
  }
}

import FirstTab from "./FirstTab";

type Props = {
  project
};


export interface AssetsState extends IGridProps {
    project: {}
}


export class Assets extends React.PureComponent<Props, AssetsState> {
     private projectSpacesGridElement = React.createRef<HTMLDivElement>();
     private myTabs = React.createRef<JqxTabs>();

constructor(props: Props) {
    super(props);
    this.state = {
        project: {}
     };
  }

  public render() {

    return (
      <div>
      <JqxTabs
        ref={this.myTabs}
        theme={"arctic"}
        width="1390px"
        initTabContent={this.initWidgets}
       >
        <ul>
          <li style={{ marginLeft: 30 }}>
            <div style={{ height: 20, marginTop: 5 }}>
              <div style={{ float: "left" }}></div>
              <div
                style={{
                  marginLeft: 4,
                  verticalAlign: "middle",
                  textAlign: "center",
                  float: "left"
                }}
              >
                Project Spaces
              </div>
            </div>
          </li>
        </ul>
        <div >
          <div id="jqxGrid" ref={this.projectSpacesGridElement} />
        </div>

      </JqxTabs>
  </div>

    );
  }

private initWidgets = (tab: any) => {
    switch (tab) {
      case 0:
        render(<FirstTab/>, this.projectSpacesGridElement.current!);
        break;

    }
  };

}

而我的FirstTab.tsx如下:

import React from "react";
import * as ReactDOM from "react-dom";
import JqxGrid, {
  IGridProps,
  jqx
} from "jqwidgets-scripts/jqwidgets-react-tsx/jqxgrid";
import { properties } from "../properties";

type Props = {
    project
};

export interface PSState extends IGridProps {
       project: {}
    }

export default class FirstTab extends React.Component<Props, PSState> {

   private assetsDataGrid = React.createRef<JqxGrid>();
   private baseUrl = properties.baseUrlWs;


    constructor(props: Props) {
      super(props);
      this.state = {
         project: {},
    };

    }// End of Constructor

   render() {

    const source: any = {
      datafields: [
        { name: "id", type: "long" },
        { name: "assetsTypeId", type: "long" }
       ],
     deleterow: (rowid: number,commit:any): void => {
         commit(true);
      }, 
     datatype: "json",
      root: "company",
      url: this.baseUrl + `api/records/search/getNumbers`
    };
    return (
        <div>
         <JqxGrid
            ref={this.assetsDataGrid}
            width={"100%"}
            height={"100%"}
            theme={"arctic"}
           />        

          </div>

      );
    }
}//End of the Class

这是我在 Visual Studio 代码 IDE 中第 81 行遇到的错误的屏幕截图。

上述错误的基于文本的描述:

在这一行render(&lt;FirstTab/&gt;, this.projectSpacesGridElement.current!);&lt;FirstTab/&gt; 正在抛出错误:{} 类型中缺少属性 project,但在 Readonly&lt;Props&gt;.ts(2741) 类型中是必需的

我不明白的另一件事是为什么我会收到与render 相关的错误,如下面的屏幕截图所示。我在上面分享的 StackBlitz 编辑器的工作示例中没有错误:

上述错误的基于文本的描述:

render(&lt;FirstTab/&gt;, this.projectSpacesGridElement.current!); 这一行上,我在render 方法上看到一个错误,上面写着Cannot findrender. Did you mean the instance memberthis.render`? ts(2663)

【问题讨论】:

  • 请尽量避免将文字作为图片发布。我在工作,Imgur 链接被屏蔽了,所以我不知道你的错误来自哪里。
  • @ChrisB。请参阅更新的基于文本的描述。谢谢

标签: reactjs typescript


【解决方案1】:

由于某种原因,您定义了类型 Props 并说您的道具需要在其中包含项目类型。我认为您不需要任何代码,可能应该将其删除。

type Props = {
  project
};

通常在定义自定义道具类型时,您应该给它一个不同的名称,例如 MyComponentPropType = { }。

【讨论】:

  • FirstTab 中删除type Props = { project }; 确实消除了错误。但是与render 相关的错误仍然存​​在。知道我在那里做错了什么吗?谢谢!
  • 将其更改为ReactDOM.render 解决了render 相关错误的问题。
  • 实际上我必须这样做import { render } from "react-dom"; 才能摆脱render 相关的错误。使用ReactDOM.render,我仍然注意到与控制台相关的错误。导入后,一切正常。
  • 我刚刚意识到我可能需要该类型Props,有什么替代方法可以在不产生任何错误的情况下使用它?谢谢!
猜你喜欢
  • 2019-07-11
  • 2019-09-19
  • 2021-07-26
  • 1970-01-01
  • 2020-12-25
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多