I didn't know you have a TH-cam channel. I was trying for hours, reading the documentation and failed. And here you explain everything in just 15 minutes. Thank you for the video!
Love NextJS!!! Y’all are doing amazing innovative changes and I can’t wait for the app folder to be in production!! I’m hopping it’s coming in the near future. Keep up the great work team!!
Thank you! I'm not an expert in NextJS and in their docs for app router, couldn't find any mention of utilizing params to get the id from a dynamic route. I was messing with headers, pathname etc when params would have been fine. You helped me so much. Now I'm just trying to figure out why pages in my dynamic routes don't use the root layout (the page itself takes over the whole screen and the root layout is gone)
Light years ago music was on vinyl records, then on CDs and now it's streamed from cloud. Movies were on VHS, later DVDs and BlueRays - now it's streamed from cloud. Video games... can't ever remember all those consoles but now it's all digital and also you can stream playing in cloud. Finally webApps - your UI had been rendering on your device's broweser for days or rendered server-side... ...until now. It's time for streaming era even in webdev with UI Streaming! Simply render component, cache or revalidate it and serve to clients! Just this tiny piece! FINALLY I am sooooo hyped for the stable release you can't image. Love what u doing guys
I have been using app router for a few months on few of my production projects, and very impressed with the results. I'd love to see videos on how to implement GTM/GA, and posting data e.g. updating user details in a form.
Yeah this would be great, seems work on mutations is still ongoing for now…. But it seems the app directory is reaching stable, started a new SAAS project with it and hopefully it doesn’t end in tears 😂
In 13:35 it's mentioned that "these are automatically deduplicated". If in getRepo was passed fetch({ cache: no-store }) would generateMetadata and Page make only one or two requests each refresh?
thank you so much for this video, i am new to nextjs and i know noone that knows nextjs 13, so they couldnt help me with a problem i got with routing. but then you came!
Wow, never been so happy to be told I have to re-write my code base ... what's NEXT ;) 1) As has been asked below, how do we now define a list of paths for prerendering - previously done using getStaticPaths Method? The docs do not seem to detail this specifically? 2) Observation - the generic naming convention for Page and API routes will make searching for files during development a bit of a task? Thanks a million - super framework.
I'm learning NextJS at the moment and I have the same question about the generic naming convention. I opted for the old routing system because I want each file to have a more descriptive name. I'm still trying to understand the advantages of the new routing system, so if anybody can explain, please do it! thank you :)
Love it make me want to use nextjs every single day. You’re an amazing team with an amazing product. Huge kudos for all of you and a special thank to you Lee for your videos
This is a great refresher and summary of all the awesome features of the nextjs app directory. I'm curious if there are any implications of setting the cache: no-store parameter on the fetch keyword.
Can i just ask how do i generateStaticParams using prisma. Because for some reason i always get undefined instead of receiving array of ids and generates a type error when i try next/build
usually, you don't need to think about state management in an old-fashioned way, now all requests are cached by default so you just need to create the function `fetchSomeShit` and reuse it. For a client-based state, you can use old approaches as well
this video basically just combines all the previous ones and answered none of the questions I still have: - what kinds of metadata can you set with this new approach? What about custom metadata tags? - how exactly do you deduplicate fetches with cache set to "no-store" - how exactly do you extend the types of `fetch`? Will it mess up client components that use fetch in a useEffect? Do the changes apply outside of the app directory? - Do I always need to include "use client" at the top of every file in my entire repo forever or only specifically on the client components inside the app directory? - Can I create a folder of shared server components inside the app directory (assuming you cannot use server components elsewhere, see above question) and simply have no page.tsx in there, so no route is created, or will Next complain at the lack of a page.tsx file? - Does anything change for components that use something like typeof document to determine whether they are running in server/hydration or client (post-hydration)? - How do you pass data from a page to a layout? In Astro you import layouts yourself and thus can pass "up" data to the layout in your jsx template - How do you access the router object in a layout since useRouter won't work in server components? Do I still need my navigation to be a client component just so I can render the current route in a different style? - In addition to above question: what about something like rehype-react (assuming I do not want mdx and prefer my own implementation using unified), which currently uses hooks to render? I made it work in the old pages directory API by returning the result prop of the processSync method on my renderer, but currently this reprocesses the entire post during hydration. Is it possible to use the renderer in the server only and have client components inside the result (such as a youtube embed)? - Do you still plan to eventually remove the pages directory API entirely? My biggest project is currently going through a big rewrite that still uses that API and if I have to rewrite it all again I may or may not switch frameworks at that point, depending on if this app directory API works out for me in the end, which I am currently not sure about.
Awesome!!! Just have a question about generateMetaData : We need to do a getRepo twice (inside component and generateMetaData) I think it's a shame that we can't make this call only once to reuse the response of the getRepo in component for the generateMetaData... Isn't there another way to make a single network call? Thanks!
The big thing here is being able to import npm packages like embedded tweets, unsplash images, etc, that do their own fetching on the server. The bad side is that the nesting is incredibly quirky, and waterfall-prone. If there's not enough education on the subject, the level of apps will reduce, and the number of new apps passing the performance criteria will reduce dramatically. The architecture allows for bad fetching. But well so does react-query, apollo client and friends.
What If I have some dynamic data on one route and I navigate to another route where I add to that data with a post request (for example a blog post) and If I navigate back to the previous route (without refresh) I want to see the fresh data list (post list) with the new item added? What can I use it to invalidate the cache and make Next.js to call the fetch again without refresh?
In production, in my "use client"; components, the data is cached and won't revalidate even if I follow the instructions in this video. Very annoying. How would I not cache the data in a client side component?
Had an issue where halfway through development we needed a page that we did not want to use the root layout. Seems like the only way to do that is to split that one page and the rest of the site into two separate folders in the app directory, each with their own layout. Tried doing that but as a result all my imports / paths broke. Is there an easier way to go about creating different root layouts? Or opting out of a root layout?
I have been thinking the same, on how to out out of a certain layout for a specific page that is deeply nested. Like I would like to have root: layout work and layout level 2 work but I don't want layout level 1 to be included in the same route. Like how do I avoid that. Right Now The only way of doing it seems to be, not using layouts and instead use it as components that you can import like how we did it in the old nextjs.
Nice video! Could I know why every time when you type new lines of code, the "code hints" in grey colors already know what you are going to type? Any plugins abt this? Thx
I am really excited for this update but here is a suggestion/question how can we access req/context like we did in getServerSideProps for ex: context.req/res how can we do that in new app directory I hope this all gets added if not exists and if anyone reading this can anyone tell me which theme was he using it is good
hey i am new so i have a simple question....after next13.4 we cannot use getServerSideProps in the latest versions? we have to do it like we usually do inside the component without defining additional function right???
Just curious to know the last part (SEO) of the video, Is it okay to fetch same data through API twice on same page? Or is it working in a way I don't understand
using the next/link within mapping function gives hydration error. I think this is a very common issue now.. please fix it in the next update
ปีที่แล้ว
why I can not get fetching on server component working - nothing better than - error SyntaxError: Unexpected token < in JSON at position 0 tried everything. Api routes in page/api
@vercel. I want to use the caching system like pinia or redux. it there a tutorial that explained it that way. so when I fetch something from a child node I can get it from a parent node somewhere else.
What i dont understand is what If I need to GET or POST Data from a client component? Sometimes I have the case that I have a client component, click a button to write Data to a database. In this case I don't have a Server component but i still need to fetch data..
Thanks for sharing! I am confusing what different between images in source code and in public folder (performance, bundle size, ... ) and what is the best practice?
This is cool but how can we use middleware inside the app dir folder? Is this already developed? I am using one on the root but I need more for my app. Thank you.
Is it possible to register a path to the router? Where it should scan files that it will register as routes? Imagine a nextJS library that scaffolds the entire authentication feature… it will allows users to visit /login page… how should that package tell NextJs that a page exists in this path and it should include this path in creating the route.
I'm using app router. What if I want to display a sidebar on all /blog/[id] pages and keep main layout for all other pages? I've tried creating a separate layout for /blog, but it seems to inherit root layout as well, so I'm not too sure what would best approach would be? Somehow conditionally render a layout depending on a route?
{ cache: "no-store" } doesnt work if we use Link component in the Layout file... It will work only after manual hardrefresh and further on and it will work Only for that segment which we manualy hardrefreshed. If we have two or more segments with no-store we need to make manual hardrefresh in each of them for SSR to start work. But when we do that "the manual hardrefresh" in one of the segemnts, the SSR stops working on the other segments again... (This all previous mentioned applies only if we use Link component from the Layout file.
Can anyone know why he doesn't use `useEffect()` when he fetches from an API? I thought it's common practice to use it so you don't get unexpected behavior?
When experimenting with dynamic routes and looking at the x-vercel-cache header I noticed I only got a HIT on static routes, as soon as I used a dynamic route, like the blog post in the video, it resulted in a MISS. Why can I get the same level of caching on dynamic routes? Caching should be more dependent on the data on the page than the actual url.
Bro just explained half of my Next JS problems in 15 mins! Wow! This guy is good! 👍👍👍
beacuse it is by next js original channel
I didn't know you have a TH-cam channel. I was trying for hours, reading the documentation and failed. And here you explain everything in just 15 minutes. Thank you for the video!
This was an excellent demo. Concise, brief and to the point. Thanks Lee!
Thank you, this made my day 😁
This guide really answered almost all of my questions, it's short and straightforward. You're doing a great job.
Same thing I said. Like it was really packed with information and yet short.
Love NextJS!!! Y’all are doing amazing innovative changes and I can’t wait for the app folder to be in production!! I’m hopping it’s coming in the near future. Keep up the great work team!!
Literally, the only thing new was the last stuff with Metadata
nothhing innovate ... it has been part of nuxt.js since for ever ...
Its now stable!! Horray just as i got back to next js
Ai generated comment
@@tabletuser123 nope I’m real lol. Your account name looks AI generated
I love Next.Js. Keep on going guys.
Thank you!
Thank you! I'm not an expert in NextJS and in their docs for app router, couldn't find any mention of utilizing params to get the id from a dynamic route. I was messing with headers, pathname etc when params would have been fine. You helped me so much. Now I'm just trying to figure out why pages in my dynamic routes don't use the root layout (the page itself takes over the whole screen and the root layout is gone)
Dude you legit saved me. Was spending so much time on this. This is the only video that helped me
Thanks Nextjs team, you're making the world of dev a better place and without headache.
How do you manage localstorage in next. As we can't access it since next prerenders on server, right?
use LocalStorage in a client component 'use client'@@depression_plusplus6120
Love how you're using TS along with the code. That's real world coding.
Light years ago music was on vinyl records, then on CDs and now it's streamed from cloud.
Movies were on VHS, later DVDs and BlueRays - now it's streamed from cloud.
Video games... can't ever remember all those consoles but now it's all digital and also you can stream playing in cloud.
Finally webApps - your UI had been rendering on your device's broweser for days or rendered server-side...
...until now.
It's time for streaming era even in webdev with UI Streaming!
Simply render component, cache or revalidate it and serve to clients! Just this tiny piece!
FINALLY
I am sooooo hyped for the stable release you can't image. Love what u doing guys
I have been using app router for a few months on few of my production projects, and very impressed with the results. I'd love to see videos on how to implement GTM/GA, and posting data e.g. updating user details in a form.
Great suggestions!
Yeah this would be great, seems work on mutations is still ongoing for now…. But it seems the app directory is reaching stable, started a new SAAS project with it and hopefully it doesn’t end in tears 😂
This guy should keep posting videos, the examples and the way he explain things are just amazing
In 13:35 it's mentioned that "these are automatically deduplicated". If in getRepo was passed fetch({ cache: no-store }) would generateMetadata and Page make only one or two requests each refresh?
7:55 How can I pass the data from root layout to the children.
thank you so much for this video, i am new to nextjs and i know noone that knows nextjs 13, so they couldnt help me with a problem i got with routing. but then you came!
Once the remaining router bugs are fixed, this will be amazing
This is the future of Web Developement!!!!
Wow, never been so happy to be told I have to re-write my code base ... what's NEXT ;)
1) As has been asked below, how do we now define a list of paths for prerendering - previously done using getStaticPaths Method? The docs do not seem to detail this specifically?
2) Observation - the generic naming convention for Page and API routes will make searching for files during development a bit of a task?
Thanks a million - super framework.
I'm learning NextJS at the moment and I have the same question about the generic naming convention. I opted for the old routing system because I want each file to have a more descriptive name.
I'm still trying to understand the advantages of the new routing system, so if anybody can explain, please do it! thank you :)
used nextjs in my senior capstone project, it's blowing everyone away!
Full stack industry level application tutorial needed for all the best practices and application
Love it make me want to use nextjs every single day. You’re an amazing team with an amazing product. Huge kudos for all of you and a special thank to you Lee for your videos
Appreciate the kind words :)
Currently using this in my next project and it’s so much easier to route between pages
Super excited to use this in prod soon!😁
Thank you team vercel for explaining the concepts!
Thank *you*!
@@leerob you're welcome
Love these new improvements. This is why I love Next JS ❤
This is a great refresher and summary of all the awesome features of the nextjs app directory. I'm curious if there are any implications of setting the cache: no-store parameter on the fetch keyword.
Thank you so much vercel and @leerob , very short and informative video , i really like the app directory .
i admit, this is truly fantastic! thanks to you amazing people of vercel and to you Lee, you're awesome.
i'd love to know more to understand fully...
Thanks! Those new features are really neat.
Very helpful!! Hope to see more videos like this!!
Finally i get the solution of routing. Huh. Please mention this specifically clear in the your website.
Next finally cracking Jekyll's layout feature 13 years later. But good demo of the data fetching behavior from Lee!
Excellent delivery!
What's the color scheme?)
Can i just ask how do i generateStaticParams using prisma. Because for some reason i always get undefined instead of receiving array of ids and generates a type error when i try next/build
Please make a video on, Deployment. How to optimize and the proper way to deploy your app for the wild in new nextjs 13 way
I'd love to see a state management video for Next13. How server data can be hydrated on client to add interaction
just pass props to a client component, that simple :)
@@zuma206 large apps don't use prop drilling. They have their own client store
@@RedVelocityTV I think you would just pass the props to the layout where it can hydrate the client store, just like with the current pages system
usually, you don't need to think about state management in an old-fashioned way, now all requests are cached by default so you just need to create the function `fetchSomeShit` and reuse it. For a client-based state, you can use old approaches as well
Is there a difference between no-cache, no-store and next.revalidate: 0?
what is the name of that vs extension at 5:47 ?
Whats the best way to handle Auth and Pass state from server to client
this video basically just combines all the previous ones and answered none of the questions I still have:
- what kinds of metadata can you set with this new approach? What about custom metadata tags?
- how exactly do you deduplicate fetches with cache set to "no-store"
- how exactly do you extend the types of `fetch`? Will it mess up client components that use fetch in a useEffect? Do the changes apply outside of the app directory?
- Do I always need to include "use client" at the top of every file in my entire repo forever or only specifically on the client components inside the app directory?
- Can I create a folder of shared server components inside the app directory (assuming you cannot use server components elsewhere, see above question) and simply have no page.tsx in there, so no route is created, or will Next complain at the lack of a page.tsx file?
- Does anything change for components that use something like typeof document to determine whether they are running in server/hydration or client (post-hydration)?
- How do you pass data from a page to a layout? In Astro you import layouts yourself and thus can pass "up" data to the layout in your jsx template
- How do you access the router object in a layout since useRouter won't work in server components? Do I still need my navigation to be a client component just so I can render the current route in a different style?
- In addition to above question: what about something like rehype-react (assuming I do not want mdx and prefer my own implementation using unified), which currently uses hooks to render? I made it work in the old pages directory API by returning the result prop of the processSync method on my renderer, but currently this reprocesses the entire post during hydration. Is it possible to use the renderer in the server only and have client components inside the result (such as a youtube embed)?
- Do you still plan to eventually remove the pages directory API entirely? My biggest project is currently going through a big rewrite that still uses that API and if I have to rewrite it all again I may or may not switch frameworks at that point, depending on if this app directory API works out for me in the end, which I am currently not sure about.
You just have save my project before I turn crazy, tx comrade
I can't wait to use the app directory stable
For everyone wondering what icon pack it is, it's vscode-icons
Awesome!!!
Just have a question about generateMetaData :
We need to do a getRepo twice (inside component and generateMetaData)
I think it's a shame that we can't make this call only once to reuse the response of the getRepo in component for the generateMetaData...
Isn't there another way to make a single network call?
Thanks!
Bingo! at least would take data from the Page params
very straightforward, love it
The big thing here is being able to import npm packages like embedded tweets, unsplash images, etc, that do their own fetching on the server. The bad side is that the nesting is incredibly quirky, and waterfall-prone. If there's not enough education on the subject, the level of apps will reduce, and the number of new apps passing the performance criteria will reduce dramatically. The architecture allows for bad fetching. But well so does react-query, apollo client and friends.
What’s icon pack is this? Vscodd
Could you please tell us the extensions that you are using to speed the development ?
Leerob is fcking amazing!!! I love these videos!!!
What If I have some dynamic data on one route and I navigate to another route where I add to that data with a post request (for example a blog post) and If I navigate back to the previous route (without refresh) I want to see the fresh data list (post list) with the new item added? What can I use it to invalidate the cache and make Next.js to call the fetch again without refresh?
In production, in my "use client"; components, the data is cached and won't revalidate even if I follow the instructions in this video. Very annoying. How would I not cache the data in a client side component?
Had an issue where halfway through development we needed a page that we did not want to use the root layout. Seems like the only way to do that is to split that one page and the rest of the site into two separate folders in the app directory, each with their own layout. Tried doing that but as a result all my imports / paths broke.
Is there an easier way to go about creating different root layouts? Or opting out of a root layout?
I have been thinking the same, on how to out out of a certain layout for a specific page that is deeply nested. Like I would like to have root: layout work and layout level 2 work but I don't want layout level 1 to be included in the same route. Like how do I avoid that. Right Now The only way of doing it seems to be, not using layouts and instead use it as components that you can import like how we did it in the old nextjs.
What is the optimized approach for implementing Material UI in Next v13 ? :)
The optimized approach would be to not implement Material UI ;)
@@Chiny_w_Pigulce what if you have large app built with MUI5 in next 12 and want to migrate to version 13
I think you can extract the provider context into a wrapper component and wrap the root layout with it
How would the app know how many ISR pages it has to store it statically first at build time?
Nice video! Could I know why every time when you type new lines of code, the "code hints" in grey colors already know what you are going to type? Any plugins abt this? Thx
Clear and to the point: thanks!
how is it close to stable when we dont even have an implementation for data mutation?
I am really excited for this update but here is a suggestion/question how can we access req/context like we did in getServerSideProps for ex: context.req/res how can we do that in new app directory I hope this all gets added if not exists and if anyone reading this can anyone tell me which theme was he using it is good
You can access requests by accepting a request as an argument to the page function.
@@JustATempest Thanks For The Reply But Can You Actually Tell Me How Can I Do That?
hey i am new so i have a simple question....after next13.4 we cannot use getServerSideProps in the latest versions? we have to do it like we usually do inside the component without defining additional function right???
@@MohitSharma-rz1uqYes you can define a component as a client by using "use client" in 1st line of the component
Start learning Next from App router is much more easy now😀
very well explained! just wow
is there a way to combine between getting the data from a server component and the use of "use hook" on the client component to avoid passing props??
Dynamic segments work on dev. But when i serve it in local it gives me 404 not found. What am i doing wrong ?
Anybody know which icon pack hee is using?
Just curious to know the last part (SEO) of the video, Is it okay to fetch same data through API twice on same page? Or is it working in a way I don't understand
This is the best video I found for app router! Screw all the wanna be copycats, Lee ur awesome!
using the next/link within mapping function gives hydration error. I think this is a very common issue now.. please fix it in the next update
why I can not get fetching on server component working - nothing better than - error SyntaxError: Unexpected token < in JSON at position 0
tried everything. Api routes in page/api
When i use axios for call api, i can't use revalidate
Love the app directory, made my life so much easier!
Glad to hear it!
@@leerob Hey Lee, can you please share with us the VSCode theme that you were using during this video?
why you not used src folder?
Can I load data in layout.tsx and pass some of the data as a props to page.tsx which is layout children?
Hi, what is the suggestion or snippet extension?
@vercel. I want to use the caching system like pinia or redux. it there a tutorial that explained it that way. so when I fetch something from a child node I can get it from a parent node somewhere else.
What i dont understand is what If I need to GET or POST Data from a client component? Sometimes I have the case that I have a client component, click a button to write Data to a database. In this case I don't have a Server component but i still need to fetch data..
Just what I needed, awesome!
Thanks for sharing! I am confusing what different between images in source code and in public folder (performance, bundle size, ... ) and what is the best practice?
How to fetch data with bearer token in server component, i.e. how do we retrieve the bearer token?
This is cool but how can we use middleware inside the app dir folder? Is this already developed? I am using one on the root but I need more for my app. Thank you.
Middleware is supported!
Which extension is used to predict all the async await fetch code generation that we see in the video?
Extremely helpful video, thank you!
VS Code Theme name?
Is it possible to register a path to the router? Where it should scan files that it will register as routes?
Imagine a nextJS library that scaffolds the entire authentication feature… it will allows users to visit /login page… how should that package tell NextJs that a page exists in this path and it should include this path in creating the route.
Yes. This is very helpful. Thank you.
I'm using app router. What if I want to display a sidebar on all /blog/[id] pages and keep main layout for all other pages? I've tried creating a separate layout for /blog, but it seems to inherit root layout as well, so I'm not too sure what would best approach would be? Somehow conditionally render a layout depending on a route?
Video about auth with new Next would be nice. How to protect routes and such
Do I see an API folder in the app directory! Would’ve love to hear about that.
how can I use revalidateTag when using for example firebase or prisma to fetch data ?
{ cache: "no-store" } doesnt work if we use Link component in the Layout file... It will work only after manual hardrefresh and further on and it will work Only for that segment which we manualy hardrefreshed. If we have two or more segments with no-store we need to make manual hardrefresh in each of them for SSR to start work. But when we do that "the manual hardrefresh" in one of the segemnts, the SSR stops working on the other segments again... (This all previous mentioned applies only if we use Link component from the Layout file.
Is it good to fetch data in both functions
Page and genratemetadata
How to reuse the same data when i am using axios
Amazing stuff ❤
Can anyone know why he doesn't use `useEffect()` when he fetches from an API? I thought it's common practice to use it so you don't get unexpected behavior?
Whats the extension
that you use to auto complete code? thanksss
When experimenting with dynamic routes and looking at the x-vercel-cache header I noticed I only got a HIT on static routes, as soon as I used a dynamic route, like the blog post in the video, it resulted in a MISS. Why can I get the same level of caching on dynamic routes? Caching should be more dependent on the data on the page than the actual url.
What if i want to use no-cache or revalidate on a async function like googleapi's auth & getRange from googlesheets ( wich is not a fetch function )?
I am not able to fetch the data with this technique and I am getting errors like
Unhandled Runtime Error
Error: unable to get local issuer certificate
Waiting too much for stable app folder. Almost changing framework...
this is BEAUTIFUL!!!!!
Pages are reloading while navigating between routes using the component in app router! Is there any fix for this?