====== React Cheat Sheet ====== [[https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?utm_source=chrome-ntp-icon|React Devtools]] extension. If component does not have state, does not have user interaction, is not top-level component, use **function** component. Otherwise, use **class** component. Use 'axios' library for AJAX requests. // Not so good, cos setState is async and could make race condition. handleClick = () => { this.setState({ counter: this.state.counter + 1 }); }; // Fixed. Only needed if accessing current (prevState) state. handleClick = () => { this.setState((prevState) => { counter: prevState.counter + 1 }); }; ===== What triggered a render? ===== componentDidUpdate(prevProps, prevState) { Object.entries(this.props).forEach(([key, val]) => prevProps[key] !== val && console.log(`Prop '${key}' changed`)); if (this.state) { Object.entries(this.state).forEach(([key, val]) => prevState[key] !== val && console.log(`State '${key}' changed`)); } }