🕳️
remix使ってハマった💦
Tips 🚨
remixというフレームワークで、コンポーネントを作成して、importする時に、エラーが出て悩まされた💦
どうやら、export defaultと書かないようだ。
修正するとエラーが消えます。
example
componentディレクトリに、Counter.tsxを作成。
app/component/Counter.tsx
import { useState } from "react"
// remixでは、export defaultにしない!
export const Counter = () => {
const [count, setCount] = useState<number>(0)
const increment = () => setCount(count + 1)
return (
<div>
<h1>Counter</h1>
<p>{count}</p>
<button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" onClick={increment}>Increment</button>
</div>
)
}
routesディレクトリに、ある_index.tsxで、Counterコンポーネントをインポートする。
import { Counter } from "~/component/Counter"
と書くのがポイント。~を使って、ディレクトリを指定する。
app/routes/_index.tsx
import type { MetaFunction } from "@remix-run/node";
import { Counter } from "~/component/Counter"
export const meta: MetaFunction = () => {
return [
{ title: "New Remix App" },
{ name: "description", content: "Welcome to Remix!" },
];
};
export default function Index() {
return (
<div className="font-sans p-4">
<Counter />
</div>
);
}
公式に情報があるようだが、これだけではよくわからないな。
Route Component
The default export of a route module defines the component that will render when the route matches.
ルートコンポーネント
ルートモジュールのデフォルトのエクスポートは、ルートがマッチしたときにレンダリングされるコンポーネントを定義します。
export default function MyRouteComponent() {
return (
<div>
<h1>Look ma!</h1>
<p>I'm still using React after like 8 years.</p>
</div>
);
}
Discussion
たまたま記事を拝見した者なのですが、Remix は関係ないエラーだと思います。
最初に
export default
と書いていてエラーが出たのは、export
とexport default
では import 文の書き方が異なるためです。export default
にした場合はimport Counter from "~/components/Counter"
というように{}
無しで import 文を書く必要があります。なので、
export default Counter
を書いたまま、エラーメッセージに書いてある通り import 文のほうをimport Counter from "~/components/Counter"
に直せば問題ないです。Remix で
export default
と書けないということはないですよ。参考 URL: https://typescriptbook.jp/reference/import-export-require#es-module
コメントありがとうございます。決まった書き方しかしないので、知識不足でした💦
できました。
Component
import