【TypeScrpt】Reactでデータをコンポーネントに受け渡す
TypeScript

【TypeScrpt】Reactでデータをコンポーネントに受け渡す

作成日:2022年05月07日
更新日:2022年05月07日

React で名前と年齢のデータをコンポーネントに受け渡したいとします。

App.tsx

tsx
import React from "react";
import Person from "./components/Person";
const persons = [
{ name: "田中", age: 32 },
{ name: "佐藤", age: 26 },
];
function App() {
return (
<ul>
{persons.map((person) => {
return <Person person={person} />;
})}
</ul>
);
}

components/Person.tsx

tsx
import React from "react";
const Person = ({ person }) => {
return (
<li>
{person.name}さん{person.age}
</li>
);
};
export default Person;

このコードでは、コンポーネントの person で『Binding element 'person' implicitly has an 'any' type.』というエラーが発生します。

image2

Person.tsx の型を any 型にしてみます。

tsx
const Person = ({ person }:any) => {

image3

エラーが解消されました。

しかしこのままでは、意図しないデータ型もエラーになりません。

意図しないデータはエラーになるように、person の型を指定しましょう。

まずは、Person.tsx に Person の型を作成します。

tsx
interface Props {
person: {
name: string;
age: number;
};
}

関数名の後に、React.FC型を追加し、React.FC型にPropsを指定します。

tsx
interface Props {
person: {
name: string;
age: number;
};
}
const Person: React.FC<Props> = ({ person }) => {
return (
<li>
{person.name}さん{person.age}
</li>
);
};
export default Person;

画面を確認すると、

image4

エラーは発生しておりません。

また、person の型も確認してみると、

image5

型が定義されていました。

ちなみに、persons の age を string 型にしてみると、

image6

『Type '{\ name: string; age: string; }\ | {\ name: string; age: number; }' is not assignable to type '{ name: string; age: number; }'.』といって、age に string 型が入っているというエラーが発生しました。

© 2024あずきぱんウェブスタジオ