Skip to main content

SPFx ReactJS Display the List Data

Creating a react scaffold.

Here, we are using Jquery and therefore we need to install Jquery and Jquery types.



Installation of Jquery and Jquery types

We have SoftwareCatalog SharePoint list, we are going to show list items in a table using SPFx react js.

Once after creating react scafold,

Install Jquery 

npm install --save jquery

then Install jquery types

npm install --save @types/jquery


Create State Interface

First in interface of .ts file, we added websiteurl:string

export interface IReactShowListItemsProps {
  descriptionstring;
  websiteurlstring;
}

In main .ts file, we have calling url

websiteurl: this.context.pageContext.web.absoluteUrl

or
Refer below

public render(): void {
    const elementReact.ReactElement<IReactShowListItemsProps> = React.createElement(
      ReactShowListItems,
      {
        description: this.properties.description,
        websiteurl: this.context.pageContext.web.absoluteUrl
      }
    );

    ReactDom.render(elementthis.domElement);
  }


Now in .tsx file, import jquery for rest full call
import * as $ from 'jquery';

Now we need a JSON array. which we keep it in an interface in .tsx file for our SharePoint list reference. This interface acts like state.

Next in .tsx file, we have default class contains property interface by default. But our newly created state interface is not there, so we need to add it.

export default class ReactShowListItems extends React.Component<IReactShowListItemsPropsIReactShowListItemsWPState> {

Now we need to implement the constructor function.
Our constructor is having two parameters, 1 is props interface and 2 is state interface.
super(props);
In order to make a call with base class we use super method

  static siteurl:string = "";
  
  public constructor(props:IReactShowListItemsPropsstate:IReactShowListItemsWPState){
    super(props);
    this.state = {
      listItems: [
        {
          "Title": "",
          "ID":"",
          "SoftwareName":""
        }
      ]
    };
ReactShowListItems.siteurl = this.props.websiteurl;
  }
here static means our value of the variable will not change hence we defined with static.
this.props.websiteurl means in interface of properties, we have websiteurl as one property and 
that has value from main .ts file we already assigned.

ReactShowListItems is the class name dot and its property we are getting the URL finally.

Implement ComponentDidMount

After construct method calls, ComponentWillMount will get and then render method. Now in our case we are not rendering any thing from ComponentWillMount method to render. Hence we are going to ComponentDidMount.

As we know componentDidMount will get call after all the rendering takes place.
//note reactcontexthandler = this; is very important otherwise this. if we apply directly then some time it misbehaves. 

  public componentDidMount() {
    let reactcontexthandler = this;
    $.ajax({
      url: `${ReactShowListItems.siteurl}/_api/web/lists/getbytitle('SoftwareCatalog')/items`,
      type: "GET",
      headers: { 'Accept': 'application/json;odata=verbose;' },
      success: function (resultData) {
        reactcontexthandler.setState({
          listItems: resultData.d.results
        });
      },
      error: function (jqXHRtextStatuserrorThrown) {}
    })
  }


Implement Render 

Keep remember that in HTML render,
Root element is must. With in the root element you can keep you tag of HTML based on your requirements
Example of render method:
public render(): React.ReactElement<IReactShowListItemsProps> {
    return (
      <div className={styles.reactShowListItems}>
        
      </div>
    );
  }

render dynamically to iterate, remember that we need to create table tag first and then { } open and close brace inside then with in the braces we can implement code for itreration.

.map method is used for iterate the data

  public render(): React.ReactElement<IReactShowListItemsProps> {
    return (
      <div className={styles.reactShowListItems}>

        <table className={styles.rows}>
          {
            this.state.listItems.map(function(listItem,listItemsKey){

              let fullurlstring = `${ReactShowListItems.siteurl}/lists/SoftwareCatalog/DispForm.aspx?ID=${listItem.ID}`;
              return (
                <tr>
                  <td>
                    <a className={styles.label} href={fullurl}>{listItem.Title}</a>
                  </td>
                  <td className={styles.label}>
                    {listItem.ID}
                  </td>
                  <td className={styles.label}>
                    {listItem.SoftwareName}
                  </td>
                </tr>

              )
            })
          }
        </table>

        <ol>

        </ol>
      </div>
    );
  }

method 

Similarly we implement unordered list ol tag

<ol>
          {
            this.state.listItems.map(function(listItem,listItemsKey){
              let fullurlstring = `${ReactShowListItems.siteurl}/lists/SoftwareCatalog/DispForm.aspx?ID=${listItem.ID}`;
              return (
                <li>
                  <a className={styles.label} href={fullurl}>
                    <span>{listItem.Title}</span><span>{listItem.ID}</span><span>{listItem.SoftwareName}</span>
                  </a>
                </li>
              )
            })
          }
        </ol>

Full Code: 

.tsx file


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

import * as $ from 'jquery';

export interface IReactShowListItemsWPState {
  listItems: [
    {
      "Title""",
      "ID""",
      "SoftwareName"""
    }
  ]
}

export default class ReactShowListItems extends React.Component<IReactShowListItemsPropsIReactShowListItemsWPState> {

  static siteurlstring = "";

  public constructor(propsIReactShowListItemsPropsstateIReactShowListItemsWPState) {
    super(props);
    this.state = {
      listItems: [
        {
          "Title": "",
          "ID": "",
          "SoftwareName": ""
        }
      ]
    };
    ReactShowListItems.siteurl = this.props.websiteurl;

  }
  public componentDidMount() {
    let reactcontexthandler = this;
    $.ajax({
      url: `${ReactShowListItems.siteurl}/_api/web/lists/getbytitle('SoftwareCatalog')/items`,
      type: "GET",
      headers: { 'Accept': 'application/json;odata=verbose;' },
      success: function (resultData) {
        reactcontexthandler.setState({
          listItems: resultData.d.results
        });
      },
      error: function (jqXHRtextStatuserrorThrown) {}
    })
  }
  public render(): React.ReactElement<IReactShowListItemsProps> {
    return (
      <div className={styles.reactShowListItems}>

        <table className={styles.row}>
          <tr>
            <th>Link</th>
            <th>ID</th>
            <th>Software Title</th>
          </tr>
          {
            this.state.listItems.map(function(listItem,listItemsKey){

              let fullurlstring = `${ReactShowListItems.siteurl}/lists/SoftwareCatalog/DispForm.aspx?ID=${listItem.ID}`;
              return (
                <tr>
                  <td>
                    <a className={styles.label} href={fullurl}>{listItem.Title}</a>
                  </td>
                  <td className={styles.label}>
                    {listItem.ID}
                  </td>
                  <td className={styles.label}>
                    {listItem.SoftwareName}
                  </td>
                </tr>
              )
            })
          }
        </table>

        <ol>
          {
            this.state.listItems.map(function(listItem,listItemsKey){
              let fullurlstring = `${ReactShowListItems.siteurl}/lists/SoftwareCatalog/DispForm.aspx?ID=${listItem.ID}`;
              return (
                <li>
                  <a className={styles.label} href={fullurl}>
                    <span>{listItem.Title}</span><span>{listItem.ID}</span><span>{listItem.SoftwareName}</span>
                  </a>
                </li>
              )
            })
          }
        </ol>

      </div>
    );
  }
}

.scss file

we have made background color change as aqua and removed few default styles in row class
.row {
    @include ms-Grid-row;
    @include ms-fontColor-white;
    background-color:aqua;
    padding20px;
  }

Out Put:



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...

Power Apps Understanding

https://tejasadventure.blogspot.com/2019/10/power-apps-we-have-1.html https://tejasadventure.blogspot.com/2019/11/power-apps-how-to-configure-using-blank.html   https://tejasadventure.blogspot.com/2019/11/power-apps-field-controls.html Report We can use people picker fields, look up fields  file attachment back next save cancel download the report and this report can be used in other system of powerapp. Add new report button - asks add from existing report Report all item view can design in the way like sharepoint list views for example. we can group it Group AND or Group OR by apply filters Canvas apps: Arrange user experience and interface design allow creativity and business use case guide how the way app wants to look like. Sources can be around 200+ ways. Majorly SharePOint, Power BI From data, From Sample From CDS From blank canvas via appSource Model driven apps: Model driven apps uses power of CDS rapidly to configure your for...

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...