A Second Page and a Link
このブログの "About" ページを作って、この偉業の背後にいる天才たちについてみんなに知ってもらいましょう。ここでは、redwood
を使用して別のページを作成します:
yarn redwood generate page about
今回ルートパスを指定していないことに注意してください。もし redwood generate page
コマンドでこれを指定しなかった場合、Redwood は Route
を作成し、指定したページ名の前にスラッシュを付けたパスを与えます。この場合は /about
となります。
アプリにページを追加していくと、最初のページロード時にクライアントがダウンロードしなければならないコードが増えていくことが心配になるかもしれません。しかし、心配はいりません!Redwoodは各ページで自動的にコードを分割するので、最初のページロードは非常に速く、webpackバンドル全体のサイズへの影響を心配することなく、好きなだけページを作成することができます。もし特定のページをメインバンドルに含めたい場合は、 デフォルトの動作を上書き できます。
http://localhost:8910/about で新しいページが表示されるはずです:
しかし、手動でURLを変更しても誰も見つけてくれないので、ホームページとAboutページの双方向でリンクを張ってみましょう。まずHomePageに簡単なヘッダとナビゲーションバーをいっぺんに作成します:
- JavaScript
- TypeScript
import { Link, routes } from '@redwoodjs/router'
import { MetaTags } from '@redwoodjs/web'
const HomePage = () => {
return (
<>
<MetaTags title="Home" description="Home page" />
<header>
<h1>Redwood Blog</h1>
<nav>
<ul>
<li>
<Link to={routes.about()}>About</Link>
</li>
</ul>
</nav>
</header>
<main>Home</main>
</>
)
}
export default HomePage
import { Link, routes } from '@redwoodjs/router'
import { MetaTags } from '@redwoodjs/web'
const HomePage = () => {
return (
<>
<MetaTags title="Home" description="Home page" />
<header>
<h1>Redwood Blog</h1>
<nav>
<ul>
<li>
<Link to={routes.about()}>About</Link>
</li>
</ul>
</nav>
</header>
<main>Home</main>
</>
)
}
export default HomePage
ここでいくつか指摘しておきます:
Redwoodは Function Components が大好き。 React Hooksを多用していくが、これは関数コンポーネントでのみ有効。現在RedwoodはReact 18を利用しており、クラスコンポーネントはReactの並行レンダリング機能の恩恵が受けられないため利用は推奨しない。
Redwood の
<Link>
タグは、最も基本的な使い方として、1つのto
属性を取る。このto
属性は正しいURLを生成するために named route function を呼び出す。この関数は<Route>
のname
属性と同じ名前を持つ:<Route path="/about" page={AboutPage} name="about" />
もし
redwood generate
が作成したルート名やパスが気に入らない場合は、Routes.tsx
で自由に変更してください!名前付きルート(named route)は素晴らしいものです。ルートに関連するパスを変更した場合(例えば/about
から/about-us
に変更)、Routes.tsx
で変更するだけで、名前付きルート関数(routes.about()
)を使用しているすべてのリンクは正しい場所を指すようになります!またto
属性に文字列を渡すこともできますが(to="/about"
)、もしパスが変更された場合は、すべての/about
インスタンスを見つけて/about-us
に書き換えなければなりません。
Back Home
Aboutページに遷移したら戻れなくなっているので、ここにもリンクを追加しておきましょう:
- JavaScript
- TypeScript
import { Link, routes } from '@redwoodjs/router'
import { MetaTags } from '@redwoodjs/web'
const AboutPage = () => {
return (
<>
<MetaTags title="About" description="About page" />
<header>
<h1>Redwood Blog</h1>
<nav>
<ul>
<li>
<Link to={routes.about()}>About</Link>
</li>
</ul>
</nav>
</header>
<main>
<p>
This site was created to demonstrate my mastery of Redwood: Look on my
works, ye mighty, and despair!
</p>
<Link to={routes.home()}>Return home</Link>
</main>
</>
)
}
export default AboutPage
import { Link, routes } from '@redwoodjs/router'
import { MetaTags } from '@redwoodjs/web'
const AboutPage = () => {
return (
<>
<MetaTags title="About" description="About page" />
<header>
<h1>Redwood Blog</h1>
<nav>
<ul>
<li>
<Link to={routes.about()}>About</Link>
</li>
</ul>
</nav>
</header>
<main>
<p>
This site was created to demonstrate my mastery of Redwood: Look on my
works, ye mighty, and despair!
</p>
<Link to={routes.home()}>Return home</Link>
</main>
</>
)
}
export default AboutPage
素晴らしい!ブラウザで試して、行き来できることを確認してください。
世界レベルの開発者であれば、コピー&ペーストされた <header>
を見て、ウッてなったことでしょう。わかります。そのため、Redwoodには Layouts というちょっとしたナニカがあります。