React class component lifecycle methods re-implemented as hooks
Easiest way to migrate class components to hooks ✌️
While converting class components to hooks, I found it quite annoying to write new useEffect & useRef logic to implement the same lifecycle methods I already had. So thought I could just re-implement the lifecycle methods & states as hooks to simplify the process and it turned out to be a quick drop-in replacement for the class components 😎✨
import React, { Component } from "react"; class LegacyComponent extends Component { constructor() { super(); this.state = { text: "", }; document.title = "Legacy Component"; } componentDidMount() { this.setState({ text: "component mounted!", }); } render() { return ( <div> <h3>{this.state.text}</h3> </div> ); } }import React from "react"; import { useState, useConstructor, useDidMount, } from "@daniakash/lifecycle-hooks"; const NewComponent = () => { const [state, setState] = useState({ text: "", }); useConstructor(() => { document.title = "Legacy Component"; }); useDidMount(() => { setState({ text: "component mounted!", }); }); return ( <div> <h3>{this.state.text}</h3> </div> ); };yarn add @daniakash/lifecycle-hooks # or npm i @daniakash/lifecycle-hooksimport { useState, useConstructor, useDidMount, useDidUpdate, useWillUnmount, } from "@daniakash/lifecycle-hooks";useState behaves in the same way as this.state in class components. However it is different from React's usual useState hook cuz here it only accepts objects.
// Initialization this.state = { name: "", email: "", }; // updating name this.setState({ name: "John Doe", });// Initialization const [state, setState] = useState({ name: "", email: "", }); // updating name setState({ name: "John Doe", });As their name suggests, the following hooks are straight forward to use and they will execute the callback function at the respective component lifecycle.
useConstructoruseDidMountuseDidUpdateuseWillUnmount
Refer the example for the playground where you can experiment with these lifecycle methods
As the react documentation says, class components aren't going away, so you probably won't have to migrate your project to functional components in most cases.
But if you run into a situation like me where you need the powerful hooks from react-navigation, react-spring or any other similar library, lifecycle-hooks will make your migration a lot easier.
MIT © DaniAkash