diff --git a/README.md b/README.md index 1a261b9..b373db8 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ This gives you the power to prioritize our work and support the project contribu - [Type Definitions & Complementary Libraries](#type-definitions--complementary-libraries) - [React Types Cheatsheet](#react-types-cheatsheet) 🌟 __NEW__ - [Component Typing Patterns](#component-typing-patterns) - - [Stateless Components - SFC](#stateless-components---sfc) - - [Stateful Components - Class](#stateful-components---class) 📝 __UPDATED__ + - [Function Components - FC](#function-components---ffc) + - [Class Components ](#class-components) 📝 __UPDATED__ - [Generic Components](#generic-components) - [Render Props](#render-props) 🌟 __NEW__ - [Higher-Order Components](#higher-order-components) 📝 __UPDATED__ @@ -104,22 +104,22 @@ npm i -D @types/react @types/react-dom @types/react-redux # React Types Cheatsheet -#### `React.StatelessComponent

` or `React.SFC

` -Type representing stateless functional component +#### `React.FunctionComponent

` or `React.FC

` +Type representing a functional component ```tsx -const MyComponent: React.SFC = ... +const MyComponent: React.FC = ... ``` [⇧ back to top](#table-of-contents) #### `React.Component` -Type representing stateful class component +Type representing a class component ```tsx class MyComponent extends React.Component { ... ``` [⇧ back to top](#table-of-contents) #### `React.ComponentType

` -Type representing union type of (SFC | Component) +Type representing union type of (FC | Component) ```tsx const withState =

( WrappedComponent: React.ComponentType

, @@ -172,20 +172,20 @@ const handleChange = (ev: React.MouseEvent) => { ... } # Component Typing Patterns -## Stateless Components - SFC +## Function Components - FC -#### - stateless counter +#### - counter component ```tsx import * as React from 'react'; -export interface SFCCounterProps { +export interface FCCounterProps { label: string; count: number; onIncrement: () => any; } -export const SFCCounter: React.SFC = (props) => { +export const FCCounter: React.FC = (props) => { const { label, count, onIncrement } = props; const handleIncrement = () => { onIncrement(); }; @@ -211,12 +211,12 @@ export const SFCCounter: React.SFC = (props) => { ```tsx import * as React from 'react'; -export interface SFCSpreadAttributesProps { +export interface FCSpreadAttributesProps { className?: string; style?: React.CSSProperties; } -export const SFCSpreadAttributes: React.SFC = (props) => { +export const FCSpreadAttributes: React.FC = (props) => { const { children, ...restProps } = props; return ( @@ -234,14 +234,14 @@ export const SFCSpreadAttributes: React.SFC = (props) --- -## Stateful Components - Class +## Class Components -#### - stateful counter +#### - class counter ```tsx import * as React from 'react'; -export interface StatefulCounterProps { +export interface ClassCounterProps { label: string; } @@ -249,7 +249,7 @@ interface State { readonly count: number; } -export class StatefulCounter extends React.Component { +export class ClassCounter extends React.Component { readonly state: State = { count: 0, }; @@ -276,7 +276,7 @@ export class StatefulCounter extends React.Component = - class extends React.Component { +export const ClassCounterWithDefault: React.ComponentClass = + class extends React.Component { // to make defaultProps strictly typed we need to explicitly declare their type // @see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11640 static defaultProps: DefaultProps = { @@ -310,7 +310,7 @@ export const StatefulCounterWithDefault: React.ComponentClass( import * as React from 'react'; import { withState } from '../hoc'; -import { SFCCounter } from '../components'; +import { FCCounter } from '../components'; -const SFCCounterWithState = - withState(SFCCounter); +const FCCounterWithState = + withState(FCCounter); export default () => ( - + ); ``` @@ -1450,7 +1450,7 @@ Related `ts-lint` rule: https://palantir.github.io/tslint/rules/interface-over-t ### - how to best initialize class instance or static properties? > Prefered modern style is to use class Property Initializers ```tsx -class StatefulCounterWithInitialCount extends React.Component { +class ClassCounterWithInitialCount extends React.Component { // default props using Property Initializers static defaultProps: DefaultProps = { className: 'default-class', @@ -1470,7 +1470,7 @@ class StatefulCounterWithInitialCount extends React.Component { ### - how to best declare component handler functions? > Prefered modern style is to use Class Fields with arrow functions ```tsx -class StatefulCounter extends React.Component { +class ClassCounter extends React.Component { // handlers using Class Fields with arrow functions handleIncrement = () => { this.setState({ count: this.state.count + 1 });