React Guidelines

Imports

A common way to sort the imports in the file is by their source: external, absolute, relative separated by an empty line. Each of those groups can be sorted by line length, but that's not super important.

import React, { useState } from 'react'
import { useTranslation } from 'next-i18next'

import Nav from 'components/layout/Nav'
import Layout from 'components/layout/Layout'

import SimpleForm from './SimpleForm'
import styles from './advanced.module.scss'

File structure

Inherits AirBnb naming convention https://github.com/airbnb/javascript/tree/master/react#namingarrow-up-right

Use PascalCase for React components and camelCase for their instances

Naming convention react components

Pascal cased file names src/components/GenericForm.tsx

export default function GenericForm() {}

Filename and default component of the file should have the same name.

Naming convention non react components

Camel cased file names src/utils/hooks/useUser.ts

Naming convention folders

Lowercase kebab cased folders src/components/common/password-reset/ResetForm.tsx

Naming convention pages

Lowercase kebab cased files located in src/pages/sample-page.tsx which correspond to /sample-page url.

Types

The common convention is that the main type of the component's props is called after the component itself with suffix -Props. Prop types of AdvancedForm becomes AdvancedFormProps.

Components

Preferred export style 🌞

  • Nice IDE support and readability

Alternative export styles

Styles

There are three common ways to style a component:

Single component that inherits all sizing props from MUI https://material-ui.com/system/basics/#all-inclusivearrow-up-right

🌞 Nice for quick layouts that should follow the theme

Not the best for custom scenarios with more than _six props passed to it. Use hooks instead

Not nice when the children have clear nesting structure of more than _three levels. Use hooks or scss instead

Styles using useStyles() hook

🌞 Nice for very specific styling that leverages theme methods and props

Too verbose for simple use cases, if it contains less than 2 css rules. Use Box instead

Not the best when dealing with styling of deep nested structures within the same component. Use scss instead

Styles using SCSS files

Next.js supports SCSSarrow-up-right out of the box. Read more at https://nextjs.org/docs/basic-features/built-in-css-support#sass-supportarrow-up-right

File convention is based on a suffix .module.scss (ex. about.module.scss)

🌞 Nice when dealing with complex nested structures that are scoped in a single component. When dealing with sub-components we're not sure if some of the rules will be left unused.

Too verbose for simple use cases, if it contains less than 2 css rules in a dedicated file. Use Box instead

⛈️ Cannot use theme support or theme variables Use hook instead

Last updated

Was this helpful?