Skip to main content

React Lifecycle using SPFx

 The patter of calling the methods in SPFx React life cycle are as below

Constructor method > ComponetWillMount >  render method > ComponentDidMount > any custom methods on either button clicks > ComponentUnmount


In React, we just observe render method. But there are other methods which we can go through.


Step 1: First, I am creating a blank webpart with react framework.

Step 2: 

Now in tsx file, we are going to create an interface. We are not using the interface which has in components folder .ts file for interface.


export interface IReactLifeCycleWPState{

  stageTitle: string

}


Now, we need to extend in the .tsx file HTML part with our new interface we created.


We are adding IReactLifeCycleWPState Interface to our default export class as below.

export default class Reactlifecyclewebpart extends React.Component<IReactlifecyclewebpartProps, IReactLifeCycleWPState> {


Now, we need a constructor in .tsx file.

We are using a parameterized constructer with two interfaces are parameters. One is .ts file interface which is props interface and 2nd parameter is interface which we created above one is called state interface.


public constructor(props: IReactlifecyclewebpartProps, state: IReactLifeCycleWPState){


super(props);

 // here meaning is we are calling our base class.


This.state interface is speaking to the interface which we created.

stateTitle is the interface we created. Now from our state it is speaking via this.state with curly braces.


this.state = {

      stageTitle:'component constructor been called'

    }


Now we need to implement componentwillmount method.

This function is getting called automatically before the rendering function takes place.


First constructer is getting called

ComponentWillMount is getting called then render method is called.

Thrid componentDidMount.


Before render, if we want to do anything, that we can do in componentWillMount method.


After ComponentWillMount called, then render method will be getting called.

Then after render method, ComponentDidMount will getting called.

If we have any custom methods like button click we are calling updateState method will be getting called after render method.


Inside componentDidMount, we will specify our state properties values by using setState function.


In our example, we are using console.log for componentWillMount and one console.log for componentDidMount for understand purpose.


Now how to render in render method.


Once webpart is removed from SP page, then componentWillUnmount is getting called.


.tsx file code:

import * as React from 'react';

import styles from './Reactlifecyclewebpart.module.scss';

import { IReactlifecyclewebpartProps } from './IReactlifecyclewebpartProps';

import { escape } from '@microsoft/sp-lodash-subset';

export interface IReactLifeCycleWPState{

  stageTitle: string

}

export default class Reactlifecyclewebpart extends React.Component<IReactlifecyclewebpartProps, IReactLifeCycleWPState> {

  public constructor(props: IReactlifecyclewebpartProps, state: IReactLifeCycleWPState){

    super(props);

    this.state = {

      stageTitle:'component constructor been called'

    }

    this.updateState = this.updateState.bind(this);

    console.log("Stage Title from Constructor: "+this.state.stageTitle);

  }

  public componentWillMount(){

    console.log("componentWillMount has called");

  }

  public componentDidMount(){

    console.log("Stage Title from componentDidMount: "+this.state.stageTitle);

    this.setState({

      stageTitle:'componentDidMount has called',

    });

  }

  public updateState(){

    this.setState({

      stageTitle:'updateState has called',

    });

  }

  public render(): React.ReactElement<IReactlifecyclewebpartProps> {

    return (

      <div>

        <h1>ReactJS component's Lifecycle</h1>

        <p>{this.state.stageTitle}</p>

        <button onClick={this.updateState}>Click here to update the state data</button>

      </div>

    )

  }

  public componentWillUnmount(){

    console.log("componentWillUnmount has called");

  }

}


.tsx file full Code below for reference purpose:

import * as React from 'react';
import styles from './Reactlifecyclewebpart.module.scss';
import { IReactlifecyclewebpartProps } from './IReactlifecyclewebpartProps';
import { escape } from '@microsoft/sp-lodash-subset';

export interface IReactLifeCycleWPState{
  stageTitlestring
}

export default class Reactlifecyclewebpart extends React.Component<IReactlifecyclewebpartPropsIReactLifeCycleWPState> {

  public constructor(propsIReactlifecyclewebpartPropsstateIReactLifeCycleWPState){
    super(props);
    this.state = {
      stageTitle:'component constructor been called'
    }
    this.updateState = this.updateState.bind(this);

    console.log("Stage Title from Constructor: "+this.state.stageTitle);
  }

  public componentWillMount(){
    console.log("componentWillMount has called");
  }
  public componentDidMount(){
    console.log("Stage Title from componentDidMount: "+this.state.stageTitle);
    this.setState({
      stageTitle:'componentDidMount has called',
    });
  }
  public updateState(){
    this.setState({
      stageTitle:'updateState has called',
    });
  }

  public render(): React.ReactElement<IReactlifecyclewebpartProps> {
    return (
      <div>
        <h1>ReactJS component's Lifecycle</h1>
        <p>{this.state.stageTitle}</p>
        <button onClick={this.updateState}>Click here to update the state data</button>
      </div>
    )
  }

  public componentWillUnmount(){
    console.log("componentWillUnmount has called");
  }
}




Comments

Popular posts from this blog

Powerapps overcome 2000 item limit from any datasource

First go through delegation concept https://tejasadventure.blogspot.com/2020/05/power-apps-understanding.html In powerapps, we observe by default 500 item limit has set with in the app level for any data source. In order to overcome, we have option to set the limit of 2000 item limit maximum in the app. Now using code, MaximoFacility is my data source name contains 3000 items. ColFacilityDropdown is the collection storing the count of items from data source. We expect to see more than 2000 items. Based on StartWith function filtering the data with respective to the charectors and numbers as mentioned below. Code: Place the below code in a button on select property. Add label with code CountRows(ColFacilityDropdown) ClearCollect(ColFacilityDropdown,Filter(Filter(MaximoFacility, Status = "ACTIVE"), StartsWith( Title, "A" ))); Collect(ColFacilityDropdown,Filter(Filter(MaximoFacility, Status = "ACTIVE"), StartsWith( Title, "B" ))); Collect(ColFacilit...

PowerApps multiselect cascading dropdown and save an item to SharePoint List

 I have one scenario as below List 1: Division List has title field List 2: District List has Title and Division Field(LookUp from Division List) List 3: Facility List has Title, District Field(LookUp field from District List) List 4: County List has Title, Facility Field(LookUp field from Facility List) Main List: Spill Report is the main list  Division Field( Look up from Division List) District Field(Look up field from District List) Facility Field(Look up field from Facility List) County Field(Look up field from County List) List Screenshots provided below can be refered for clarification. ----------------------------------------------------------------------------------------------------- PowerApps Canvas Apps In Power Apps Canvas App, We need to first design the app with the 4 respective fields Since those fields are multiselect, then it is to combo box. Generally power apps are not supported for multiselect cascasding dropdown. Refere microsoft documentation, Know Limit...

Creating SharePoint List with columns and content types using Power Automate Flow

 Rest API Uri: https://gitbrent.github.io/SpRestLib/blog/2018/04/20/create-sharepoint-list-columns-using-rest.html Create SharePoint List: site address: Enter URL method: Post URi: /_api/web/lists headers: Accept:application/json;odata=verbose Content-Type:application/json;odata=verbose Body: {   "__metadata": {"type": "SP.List"},   "AllowContentTypes": true,   "BaseTemplate": 100,  "Description": "Admin configuration list",  "Title": "AdminConfigList" } -------------------------------------------------------------------------------------- Multi line text field: create a multiline text column: Site URL: Target Site URi: _api/lists/getbytitle('CI_CompanyNews')/fields Type: POST Body: {     '__metadata': {'type':'SP.Field', 'addToDefaultView': 'true' },     'FieldTypeKind': 3,     'Title': 'Blurb' } Headers:  Accept:application/...