mirror of
https://github.com/supabase/supabase.git
synced 2026-07-04 17:24:20 +08:00
48 lines
1.4 KiB
Markdown
48 lines
1.4 KiB
Markdown
# Writing components
|
|
|
|
## Where to create your components
|
|
|
|
- For components that declare the general structure and layout of a page:
|
|
- `/components/layouts/xxx`
|
|
- For components that are tightly coupled to a specific interface:
|
|
- `/components/interfaces/xxx`
|
|
- For components that are meant to be reusable across multiple pages:
|
|
- `/components/ui/xxx`
|
|
- Note: We're gradually moving files out of the `to-be-cleaned` folder into the respective folders as we refactor
|
|
|
|
## Component structure
|
|
|
|
- If a component has constants and utility methods that are tightly coupled to itself, keep them close to the component and enclose them in a folder with an `index.tsx` as an entry point
|
|
- Otherwise it can just be a file on its own
|
|
- For example:
|
|
- ```
|
|
components/ui
|
|
- SampleComponentA
|
|
- SampleComponentA.tsx
|
|
- SampleComponentA.constants.ts
|
|
- SampleComponentA.utils.ts
|
|
- SampleComponentA.types.ts
|
|
- index.ts
|
|
- SampleComponentB.tsx
|
|
```
|
|
|
|
## Template for building components
|
|
|
|
```ts
|
|
import { FC } from 'react'
|
|
import { observer } from 'mobx-react-lite'
|
|
|
|
// Declare the prop types of your component
|
|
interface Props {
|
|
sampleProp: string
|
|
}
|
|
|
|
// Name your component accordingly
|
|
const ComponentA: FC<Props> = ({ sampleProp }) => {
|
|
return <div>ComponentA: {sampleProp}</div>
|
|
}
|
|
|
|
// Observer is so that components listen to mobx store changes
|
|
export default observer(ComponentA)
|
|
```
|