Skip to content

Commit 7649eb9

Browse files
Improve the tip about layout-nesting vs url nesting
It was a bit confusing the tip about the layout-nesting on the SEO section. I believe this does a better job with showing the caveat over there.
1 parent 8b5e526 commit 7649eb9

File tree

1 file changed

+49
-19
lines changed

1 file changed

+49
-19
lines changed

exercises/06.seo/02.solution.nested/README.mdx

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,53 @@
55
👨‍💼 Great! Now we can customize the meta tags on our routes! Let's do a bit more
66
for our profile pages.
77

8-
<callout-info>
8+
<callout-warning>
99
🦉 You'll notice that if you navigate to the `/users/kody` route, you'll see
10-
the `Profile | Epic Notes` in the title. But you'll see only `Epic Notes`
11-
when you navigate to one of its child URLs, like `/users/kody/notes`. It
12-
behaves like that because, regardless the 2 URLs have a parent-child
13-
relationship, in terms of layout, `/users/kody/notes` is not a child of
14-
`/users/kody`. Remember that the latter folder path is defined like this:
15-
`routes/users+/$username.tsx` while the former's path is
16-
`routes/users+/$username_+/notes.tsx`. That little underscore in the name of
17-
the folder `$username_+` means that the pages inside will skip using the
18-
layout defined in the `routes/users+/$username.tsx` file. In other words,
19-
they won't be "layout-nested", even if they will be "url-nested". And, because
20-
they won't be layout-nested, they won't inherit the meta override defined
21-
in the `routes/users+/$username.tsx`, following, instead, the meta override
22-
defined in the `routes/root.tsx` which is its parent regarding layout. One way
23-
of seeing the layout parent-child relationships is by typing the
24-
`npx remix routes` in a terminal at the root of a remix project to see how
25-
the routes will be configured. It should give you a better view of the
26-
router layout-nesting structure.
27-
</callout-info>
10+
the `Profile | Epic Notes` in the title, which is expected. But if you
11+
navigate to a child path, like `/users/kody/notes`, you'll see only
12+
`Epic Notes` again. It may looks like this is an unexpected behavior as we
13+
might be expecting the children paths to inherit the parent's meta
14+
overrides.
15+
16+
## Use case: `/users/kody` and `/users/kody/notes`
17+
18+
Let's focus on `/users/kody` and `/users/kody/notes` URL paths case for a
19+
while: regardless they have a parent-child relationship in terms of their
20+
paths, they *do not* have the same relashionship in the REMIX's layout
21+
hierarchy. This is how our pages are organized in terms of files
22+
inside of the `routes` directory:
23+
24+
```shell
25+
/users/kody <=> routes/users+/$username.tsx
26+
/users/kody/notes <=> routes/users+/$username_+/notes.tsx
27+
```
28+
That little underscore in the name of the folder `$username_+` means that
29+
the pages inside of it don't use the layout defined in the
30+
`routes/users+/$username.tsx` file (and consequently, they won't use the
31+
meta override defined over there). In other words: they aren't
32+
"layout-nested", even when *they are* "url-nested". In summary:
33+
- In terms of URL path: `/users/kody/notes` *is* a child of `/users/kody`
34+
- In terms of layout: `/users/kody/notes` *is not* a child of `/users/kody`
35+
36+
The page in `/users/kody/notes` will, in fact, use the meta override from
37+
the first route module hierarchically above `routes/users+/$username.tsx`,
38+
which is the override we defined in the `root.tsx`. You can always have a
39+
better view of the layout-nesting by running `npx remix routes` in a
40+
terminal at the root of a remix project:
41+
42+
```shell
43+
➜ playground :> npx remix routes
44+
<Routes>
45+
<Route file="root.tsx">
46+
<Route index file="routes/index.tsx" />
47+
<Route path="resources/healthcheck" file="routes/resources+/healthcheck.tsx" />
48+
<Route path="users/:username" file="routes/users+/$username.tsx" />
49+
<Route path="users/:username/notes" file="routes/users+/$username_+/notes.tsx">
50+
<Route path=":noteId" file="routes/users+/$username_+/notes.$noteId.tsx" />
51+
<Route path=":noteId/edit" file="routes/users+/$username_+/notes.$noteId_.edit.tsx" />
52+
<Route index file="routes/users+/$username_+/notes.index.tsx" />
53+
</Route>
54+
</Route>
55+
</Routes>
56+
```
57+
</callout-warning>

0 commit comments

Comments
 (0)