✒️
Notes
  • Lirenxn's daily notes
  • Featured
    • Concurrent on fiber and requestIdleCallback
    • Deep dive eslint
      • eslint with class property
      • eslint with fix
      • eslint with jsx
    • A opinioned intro to React Hooks
      • React Hooks 1 - An Overview
      • React Hooks 2 - A mindset change
      • React Hooks 3 - Test Hooks
    • Handy tricks
    • About Micro FrontEnd
    • Same-site cookie
    • Thoughts
      • Application Security for frontend OWASP
      • Javascript this
      • React validation
  • 2020 Daily Notes
    • Notes-04-05-eslint-and-babel
    • Notes-04-03-Hard-interview-question
    • Notes-03-31-ReactContext-JS-inherit
    • Notes-03-28-digital-signing-webpack-dynamic-import-JsonRest-Promise-pattern-performance.measure()
    • Wk-notes-03-16-i18n-solution
    • Notes-03-15-Concurrent-with-requestIdleCallback
    • Notes-03-15-Micro-frontend
    • Wk-notes-03-09-micro-frontend-bootstrapper
    • Wk-notes-02-27-API-design-(g)RPC-REST-etc
    • Wk-notes-02-26-React-form-validation-Boolean-algebra-Rule-for-this-App-security-npm-devtool-tricks
    • Wk-notes-02-18-i18n-gRPC
    • Wk-notes-02-11-Gradual-rollout-webpack-vscode-auto-import
    • Note-02-09-spring-webpack
    • Wk-notes-02-06-more-webpack
    • Wk-notes-02-05-Learn-spring-webpack
    • Wk-notes-02-04-props-drilling-virtual-list
    • Wk-notes-02-03-same-site-cookie
    • Wk-notes-01-31-g-recaptcha-npmshrinkwrap
    • Wk-notes-01-30-React-ref
    • Wk-notes-01-23-remote-android
    • Wk-notes-01-23-test-hook
    • Wk-notes-01-22-about-Hooks
    • Wk-notes-01-17-bundling-browser-module-treeshake-2
    • Wk-notes-01-16-Bundling-Treeshaking-1
    • Wk-notes-01-13-npm-script-css-scroll
    • Wk-notes-01-13-touchscreen-hover-and-apis
    • Wk-notes-01-13-emotion-x
    • Wk-notes-01-10-codemod
    • Wk-notes-01-08-live-region-react-test-lib
    • Wk-notes-01-06-eslint-finalise
  • 2019 Daily Notes
    • Wk-notes-12-11-eslint-dive-vscode-debug
    • Wk-notes-12-10-eslint-dive
    • Wk-notes-12-6-splunk
    • Wk-notes-12-3-react-function-memo
    • Wk-notes-12-2-agile-test-micro-frontend
    • Wk-notes-11-29-npm-fix-aem-datalayer-test
    • Wk-notes-11-28-adobe-dataLayer
    • Wk-notes-11-27-a11y
    • Wk-notes-11-25-upgrade-preact
    • Wk-notes-11-22-a11y-n-voice-over
    • Wk-notes-11-21-Add-Typescript
    • Wk-notes-11-20-JSDoc
    • Wk-notes-11-19-A11y-Polyfill
    • Wk-notes-11-18-jest-mock
    • Wk-notes-11-15-React-Portal
    • Wk-notes-11-14-iOS-simulator-git-hooks-All-hands-testing
    • Wk-notes-11-13-i18n
    • Wk-notes-11-12-safari-remote-debug
    • Wk-notes-11-11-migrating-typescript-git-remote-label-Emotion-controlled-component
    • Wk-notes-11-08-living-pricing-arch
    • Wk-notes-11-07-vitual-box-n-onblur-for-div
    • Wk-notes-11-06-bug-race-virtual-dom-diff
    • Wk-notes-11-05-babel-loader-eslint
Powered by GitBook
On this page
  • Why hooks, hooks benefit
  • My own reason
  • Detail
  • Premutual React optimization

Was this helpful?

  1. Featured
  2. A opinioned intro to React Hooks

React Hooks 1 - An Overview

PreviousA opinioned intro to React HooksNextReact Hooks 2 - A mindset change

Last updated 5 years ago

Was this helpful?

Why hooks, hooks benefit

  1. Reuse stateful logic : Hard to reuse stateful logic for component. class : HOC and renderProps, Hooks : custom hooks

  2. Manage lifecycle logic : Separated and complex logic in componentDidMount, componentDidUpdate, and componentWillUnmount, can be better managed by useEffect(), and more testable

  3. Easy to understand/learn : class introduce javascript this

  4. Compile/performance benefit : Enables

My own reason

Because I have adapted myself pretty well to class component, there is not too much initiatives for myself to change. However, I would like to change because react encourage dev to do so, and lifecycle effect is hard in class.

The distinction between function and class components in React and when to use each one leads to disagreements even between experienced React developers.

Hooks tried to solve this issue, which means encourage everyone to use functional component.

We intend for Hooks to cover all existing use cases for classes, but we will keep supporting class components for the foreseeable future. At Facebook, we have tens of thousands of components written as classes, and we have absolutely no plans to rewrite them. Instead, we are starting to use Hooks in the new code side by side with classes.

class is supported because of legacy.

Detail

Variable persistent rules

Always keep in mind that Function will be called for every update/re-render, as render().

Persistent variable:

  • setState, dispatch

  • state only when paired setState() is NOT called

  • const r = useRef(); => r.current;

  • const res = useMemo(() => res, [deps]); andconst callback = useCallback(cb, [deps]); only when deps NOT changed

BE PANIC!

------

useState

Merely a new way to setup and use state. Just remember to use it in the beginning of the FC, considering it as defining variable for the FC scope.

useReducer

A hook that create a Redux store for complex state management. To use it with sideEffect, we make a custom hook to call

const [{ originalState, sideEffects }, dispatch] = useReducer();
useEffect( () => { 
  sideEffects.forEach(effect => {
    effect(state, dispatch);
  }
},[sideEffects]);

useEffect/useLayoutEffect

Just componentDidMount + componentDidUpdate combined

useRef

A funny way to create call this.ClassProperty. However, use value from r.current. Normally used as React.node reference.

useMemo/useCallback

Use a dependency array to persistent/memoize variable/callback. Just like reselect or memoize-one.

useContext

New Context.Consumer, with the initiative to avoid HOC pattern. Used with React.creataContext().

useImperativeHandle

Rare, should used with React.forwardRef(), and bind the forwarded ref behavior with imperative selected ref.

Premutual React optimization

Do NOT be obssessed with PureComponent optimization

There are no silver bullets when it comes to performance. You have to measure.

But please remember to keep PureComponent on the shelf until you have a measurement to justify it.

How to avoid passing callbacks

The best mental rule I’ve found so far with hooks is ”code as if any value can change at any time”. --

E.G.

E.G.

ahead-of-time compilation
Fredrik Höglund
https://reactjs.org/docs/hooks-reference.html#usecontext
https://reactjs.org/docs/hooks-reference.html#useimperativehandle
https://kentcdodds.com/blog/usememo-and-usecallback
https://reactjs.org/docs/hooks-faq.html#are-hooks-slow-because-of-creating-functions-in-render
https://reacttraining.com/blog/react-inline-functions-and-performance/#my-own-experience-with-purecomponent
https://reactjs.org/docs/hooks-faq.html#how-to-avoid-passing-callbacks-down