# Props

Propsとはコンポーネントへ値を渡す仕組みで、例えばBreadcrumbコンポーネントを別の場所で使う場合に、`Home`, `Library`, `Date`の部分を変えたいとすると、Breadcrumbの中で定義しているitemsを外部から渡すことで、解決することができます。

では、BreadcrumbにてPropsを受け取れるようにしましょう。Breadcrumbコンポーネントの引数として`props`と記述します。慣習的に命名はpropsとします。

<pre class="language-tsx" data-title="Breadcrumb.tsx◎"><code class="lang-tsx">import { useState } from "react";

<strong>export const Breadcrumb = (props) => {
</strong>  const items = ["Home", "Library", "Date"];
 ...
</code></pre>

次に受け取るpropsの型を定義しましょう。propsはオブジェクト型で値を受け取ります。今回はitemsという文字列型の配列を受け取るので、型エイリアスとして定義します。

定義した型エイリアスをpropsに型づけします。また、Breadcrumb内で定義している`items`は削除しましょう。

<pre class="language-tsx" data-title="Breadcrumb.tsx◎"><code class="lang-tsx">import { useState } from "react";

<strong>type Props = {
</strong><strong>  items: string[];
</strong><strong>};
</strong>
<strong>export const Breadcrumb = (props: Props) => {
</strong>  const [selectedValue, setSelectedValue] = useState("");
...
</code></pre>

引数として受け取ったpropsを利用するためprops.itemsとして呼び出すこともできるのですが、`const { items } = props`とすることで、オブジェクトから、プロパティやメソッドを展開することができます。

<pre class="language-tsx" data-title="Breadcrumb.tsx◎"><code class="lang-tsx">...
export const Breadcrumb = (props: Props) => {
<strong>  const { items } = props
</strong>...
</code></pre>

さらに、propsとして受け取っている部分で展開することもできるので以下のように修正し、`const { items } = props`は削除しましょう。

<pre class="language-tsx" data-title="Breadcrumb.tsx◎"><code class="lang-tsx">import { useState } from "react";

type Props = {
  items: string[];
};

<strong>export const Breadcrumb = ({ items }: Props) => {
</strong>  const [selectedValue, setSelectedValue] = useState("");
...
</code></pre>

これでBreadcrumbコンポーネントはpropsを受け取れるようになりました。

では、呼び出し部分にてpropsを渡してみましょう。呼び出す方では、itemsという文字列型の配列を定義したとすると、`<Breadcrumb items={items} />`のようにpropsを渡すことができます。では、文字列型の配列の定数を2つ定義して、Breadcrumbコンポーネントを2つ呼び出しましょう。

```tsx
const App = () => {
  const items1 = ["Home1", "Library1", "Date1"];
  const items2 = ["Home2", "Library2", "Date2"];
  return (
    <div>
      <Breadcrumb items={items1} />
      <Breadcrumb items={items2} />
      <UserDetail />
    </div>
  );
};
```

以下のようにブラウザにて確認できるかと思います。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FQsoTALA8H6EPZ8i97oSR%2F202312072.png?alt=media&#x26;token=9d997fd9-6874-4794-8b9c-d51e505d96fa" alt=""><figcaption></figcaption></figure>

このように、propsを利用することで、一部のみを変更して同じレイアウトやロジックを使い回すことができます。
