Импорт компонентов с помощью React / TypeScript

#javascript #reactjs #typescript #tsx #react-tsx

#javascript #reactjs #typescript #tsx #react-tsx

Вопрос:

Я хочу импортировать тестовый компонент в Home, но я продолжаю получать следующую ошибку:

 Module '"/.../src/components/Test"' has no default export. Did you mean to use 'import { Test } from "/.../src/components/Test"' instead?
 

В тестовом компоненте я продолжаю получать следующую ошибку при экспорте теста:

 Type '({ name }: Props) => void' is not assignable to type 'FC<Props>'.
  Type 'void' is not assignable to type 'ReactElement<any, any> | null'
 

Тестовый компонент

 import React,{FC} from 'react';

interface Props {
  name: string;
}
export const Test:FC<Props> = ({ name }: Props) => {
  <div>{name}</div>
};
 

Домашний компонент

 import React from 'react';
import Test from './Test'

export const Home = () => {
  <div><Test name="example" /></div>
};
 

tsconfig.json

 {
  "compilerOptions": {
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "allowSyntheticDefaultImports": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": ["src"]
}
 

Ответ №1:

Ваш код неверен. Ошибка связана с тем, как работают функции ES6 arrow (или модули ES).

Итак, позвольте мне объяснить: вы получаете ошибку TypeScript, потому что ваш Test компонент на самом деле не return использует JSX, который вы создаете.

 export const Test:FC<Props> = ({ name }: Props) => (
  <div>{name}</div>
); 

Если бы вы заменили фигурные скобки на скобки в скобках, ваш код работал бы нормально.

Кроме того, именованный экспорт не равен default экспорту. В вашем примере вы экспортируете Test через export const Test , а не default через .

Поскольку вы не экспортировали значение по умолчанию, import Test from './test.tsx' оно не будет работать.

Я предлагаю вам ознакомиться с модулями ES и функциями ES6 arrow.

Комментарии:

1. Потрудитесь объяснить недостатки? Это дает ответ на вопрос, и ресурсы предоставляются.