We can create server-side rendered React apps and static sites easily Next.js.
In this article, we’ll take a look at how to style pages, use fast refresh, and add environment variables with Next.js.
Less and Stylus Support
Next.js support Less and Stylus for styling.
To add support for it, we install the @zeit/next-less and @zeit/next-stylus plugins.
CSS-in-JS
We can also use any CSS-in-JS solution for styling our Next.js app.
For example, we can add inline styles:
function Hello() {
return <p style={{ color: 'blue' }}>hello world</p>
}
export default Hello
We can also use styled-jsx to put CSS in our JavaScript files.
It comes with Next.js.
For example, we can write:
function Hello() {
return <div>
<style jsx>{`
p {
color: blue;
}
div {
background: red;
}
@media (max-width: 600px) {
div {
background: blue;
}
}
`}</style>
<style global jsx>{`
body {
background: lightgray;
}
`}</style>
<p>hello world</p>
</div>
}
export default Hello
We add style tags which contains local and global styles.
Global styles have the global
prop and local ones don’t.
Fast Refresh
Fast refresh is a Next.js feature that makes development easier.
It gives us instant feedback on edits made to our React components.
It’s enabled by default on Next 9.4 or later.
This feature lets make edits visible without losing component state.
It’ll reload the component if we edit a component.
If we edit something that that’s not a component but it’s used by them, then both files will be refreshed.
If a file that’s imported by files outside of the refresh tree, then fast refresh will do a full reload.
When any runtime errors are encountered, then we’ll see an overlay with the error displayed.
If we added error boundaries to our app, then they’ll retry rendering on the next edit.
If there’re any hooks, then their state will be updated when a fast refresh happens.
Static File Serving
Next.js apps can have static files.
We just have to put them inside the public
folder.
For example, we can write:
function Hello() {
return <div>
<img src="/kitten.jpg" alt="kitten" />
</div>
}
export default Hello
given that kitten.jpg
is in the public folder.
We’ll see the kitten picture displayed.
We shouldn’t change the name of the public
folder since it’s the only folder that can be used to serve static assets.
Environment Variables
We can load environment variables from an .env.local
file.
For example, we can create an .env.local
file by writing:
API_KEY=...
And then we can create a page that uses the API_KEY
environment variable with:
function Photos({ data }) {
return <p>{JSON.stringify(data)}</p>
}
export async function getServerSideProps() {
const headers = new Headers();
headers.append('Authorization', process.env.API_KEY);
const res = await fetch(`https://api.pexels.com/v1/search?query=people`, {
method: 'GET',
headers,
mode: 'cors',
cache: 'default',
})
const data = await res.json()
return { props: { data } }
}
export default Photos
We access our environment variable with the process.env
object.
These environment variables are only available in the Node.js environment.
Conclusion
Next.js 9.4 or later comes with the fast refresh feature to make development more convenient.
Also, Next.js comes with CSS-in-JS support.
We can also use environment variables in our apps.