|
|
@@ -1,36 +1,36 @@
|
|
|
# Frontend Style Guide
|
|
|
|
|
|
-Generally we follow the Airbnb [React Style Guide](https://github.com/airbnb/javascript/tree/master/react).
|
|
|
+Generally we follow the Airbnb [React Style Guide](https://github.com/airbnb/javascript/tree/master/react).
|
|
|
|
|
|
## Table of Contents
|
|
|
|
|
|
- 1. [Basic Rules](#basic-rules)
|
|
|
- 1. [File & Component Organization](#Organization)
|
|
|
- 1. [Naming](#naming)
|
|
|
- 1. [Declaration](#declaration)
|
|
|
- 1. [Props](#props)
|
|
|
- 1. [Refs](#refs)
|
|
|
- 1. [Methods](#methods)
|
|
|
- 1. [Ordering](#ordering)
|
|
|
+1. [Basic Rules](#basic-rules)
|
|
|
+1. [File & Component Organization](#Organization)
|
|
|
+1. [Naming](#naming)
|
|
|
+1. [Declaration](#declaration)
|
|
|
+1. [Props](#props)
|
|
|
+1. [Refs](#refs)
|
|
|
+1. [Methods](#methods)
|
|
|
+1. [Ordering](#ordering)
|
|
|
|
|
|
## Basic rules
|
|
|
|
|
|
-* Try to keep files small and focused and break large components up into sub components.
|
|
|
+- Try to keep files small and focused and break large components up into sub components.
|
|
|
|
|
|
## Organization
|
|
|
|
|
|
-* Components and types that needs to be used by external plugins needs to go into @grafana/ui
|
|
|
-* Components should get their own folder under features/xxx/components
|
|
|
- * Sub components can live in that component folders, so small component do not need their own folder
|
|
|
- * Place test next to their component file (same dir)
|
|
|
- * Component sass should live in the same folder as component code
|
|
|
-* State logic & domain models should live in features/xxx/state
|
|
|
-* Containers (pages) can live in feature root features/xxx
|
|
|
- * up for debate?
|
|
|
+- Components and types that needs to be used by external plugins needs to go into @grafana/ui
|
|
|
+- Components should get their own folder under features/xxx/components
|
|
|
+ - Sub components can live in that component folders, so small component do not need their own folder
|
|
|
+ - Place test next to their component file (same dir)
|
|
|
+ - Component sass should live in the same folder as component code
|
|
|
+- State logic & domain models should live in features/xxx/state
|
|
|
+- Containers (pages) can live in feature root features/xxx
|
|
|
+ - up for debate?
|
|
|
|
|
|
## Props
|
|
|
|
|
|
-* Name callback props & handlers with a "on" prefix.
|
|
|
+- Name callback props & handlers with a "on" prefix.
|
|
|
|
|
|
```tsx
|
|
|
// good
|
|
|
@@ -56,5 +56,32 @@ render() {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+- React Component definitions
|
|
|
|
|
|
+```jsx
|
|
|
+// good
|
|
|
+export class YourClass extends PureComponent<{},{}> { ... }
|
|
|
+
|
|
|
+// bad
|
|
|
+export class YourClass extends PureComponent { ... }
|
|
|
+```
|
|
|
|
|
|
+- React Component constructor
|
|
|
+
|
|
|
+```typescript
|
|
|
+// good
|
|
|
+constructor(props:Props) {...}
|
|
|
+
|
|
|
+// bad
|
|
|
+constructor(props) {...}
|
|
|
+```
|
|
|
+
|
|
|
+- React Component defaultProps
|
|
|
+
|
|
|
+```typescript
|
|
|
+// good
|
|
|
+static defaultProps: Partial<Props> = { ... }
|
|
|
+
|
|
|
+// bad
|
|
|
+static defaultProps = { ... }
|
|
|
+```
|