Getting Started with React and SharePoint - From a UX Designer/Developer's Perspective

Copper Contributor

If you've been keeping watch on the new SharePoint Framework you have undoubtedly read or experienced the dichotomy of extremely basic "Hello World" articles and if not basic, then articles written by hard core-code-ninja programmers.

If you’re a Designer, Developer or UX Practitioner trying to make sense of the React and Modern SharePoint Framework universe it can be difficult reconciling these two very different spectra.

 

From a UX Practitioner's standpoint we need to know enough about Development to strategically understand what's possible in Design, while attempting to make a User’s experience better.

 

That middle ground of development and design when focused inside of SharePoint helps to build exciting experiences and promote healthy User Adoption.

The goal of this 5-part series is targeted at the hybrid role of Designer, Developer and UX Practitioner in an attempt to navigate through some of the poorly documented and major hurdles of React Development.

 

  • Part 1 – CSS tricks and working with syntax
  • Part 2 – Integration of third party or legacy plug-ins
  • Part 3 – Images, SVG graphics and Components
  • Part 4 – REST call to a SharePoint List and displaying the results
  • Part 5 – Building a super cool React Modern SharePoint Web Part

 

2.gif

 

React SharePoint Modern Framework Web Part – we will be building this in Part 5 of this series.

 

Alright, enough talk let’s get started.

Part 1 CSS in React

Ok so if you’re like me and have been using traditional CSS for almost 20 years, CSS inside React at first... is a little painful.

 

There is an in-depth blog post written by Agata Krzywda about CSS and React link detailing almost every situation and use case.  The article mentioned by Agata is very helpful for understanding CSS and React, but what the article doesn’t take into account are the real-world syntactical oddities that we run into on a daily basis, which like I’ve mentioned are generally missing from 80% of online React documentation. 

 

The SPFX team at Microsoft has done a great job by giving us the SPFX boiler plate webpart that generates the code below.

helloWorld.PNG

 

Deciphering the CSS in the SPFX boiler plate has a pretty steep learning curve partially because the boiler plate project hides some key ingredients that if you are not outwardly looking for them, you'll miss out on the learning experience. 

 

Example the Office Fabric .css file is buried in the node_modules folder and is not referenced through import in the head of the page... so if you were trying to understand where "ms-bgColor-themeDark" is being referenced its completely confusing...

 

Let's take a look at Lines 11, 14. 

Line 11: <div className={`ms-Grid-row ms-bgColor-themeDark ms-fontColor-white ${styles.row}`}>

 

Line 14: <div className={"ms-font-1 ms-fontColor-white"}>

 

These two lines show different ways to use CSS in React that mimic 90% of the web at large.

 

Now Let's look at Line 16. Notice there's some different stuff going on here... "styles" is the imported reference to the scss file and "label" is the class name.helloWorld2.PNG

 

Line16: <div className={styles.label}>

 

* The big take away here is that CSS in React has multiple ways to use it, and you can choose which works best for you depending on your situation.  Below are some extremely useful and hard to find syntactical variations of CSS in React, that go beyond the CSS article written by Agata and that also extend the SPFX boiler plate example from Microsoft.

 

Here are a few super helpful examples of className syntactical combinations

 

Multiple class names with hyphens concatenated together while still referencing the import iconstyles module.

className={[iconstyles["glyphicon"], iconstyles["glyphicon-star-empty"]].join(' ')}

Entire string of static classes in a string with a variable name inside the string

 <div className={`ms-Grid-row ms-bgColor-themeDark ms-fontColor-white ${styles.row}`}>

Multiple static classes along with a variable name concatenated together

className={[`mix`, `all`, item.Category ].join(' ')}

 

Class name as a static string. Notice the use of this ( ` )

not ( ‘ ) or ( “ )

className={`mix`}

 

Class used classically in a variable as larger static string

 const htmlstring = ` <div class="row mixitup-wrapper"></div>`;

 

This table hopefully saves a fellow Designer, Developer or UX Practitioner some time and effort, I know while I was picking up React each variation of CSS was a watershed moment. 

 

In Part 2  of this series we are going to hammer out how to work with third party plug-ins inside React like JQuery, Bootstrap and MixitUp.

0 Replies