React Made Easy
 

Mafinar Rashid Khan
Panacea Systems Limited
@mafinar

A JavaScript Library for building User Interfaces

...in a reason-about friendly way

Actually it's a way of thought, more like...

Functional Programming

JavaScript

So what do I cover here...???

And the list be like...

  • The React Way of Thinking
  • JSX
  • Components and how the fit together
  • MobX
  • Fun

But before this, let's talk about...

Vending Machines...

and now some math...

Remember f(x)?

i.e f(x) = 2*x + 1, what's f(1) kinda stuff??

What if f(x) returned HTML?

And your UI was composed of them?

...so f(10, 20) becomes <F x={10} y={20} where x,y are props, {} captures JS expressions

Your entire app is composed of those...

So How do I do this???

Think Simple!!!

Look at this little guy...

Let's think about it...

You have UI, and you have State... state changes the UI, UI might trigger state change

Programming by Wishful Thoughts, friends...

Think Backwards... (at times)

First Make This...

class MainPage extends Component {
    render() {
        return <App>
            <NavBar />
            <SideBar />
            <MainContent />
            <Footer />
        </App>
    }
}

class NavBar extends Component {
    render() {
        return <Navigation>
            <HamburgerMenu onClick={openSideBar} />
            <LinkMenu links={[["Home", "/home"], ["Products", "/product"]]} />
            <UserBar />
        </Navigation>
    }
}

Then move on to writing the actual components...

Components

Functional Programming

State Management

Take 1: <Components />

Turtles All the Way...

Was that HTML in JS?

Sorta

class Item extends Component {
    render() {
        return <li>{this.props.title}</li>
    }
}


class List extends Component {
    render() {
        return <ul>
            {this.props.list.map(
                (elem, idx) => 
                    <Item key={idx} title={elem.title} />)}
        </ul>
    }
}

That was JSX...

Back to the Board...

A Component has...

  • Props
  • State
  • Children
  • Life...

Component Lifecycles???

  • componentWillMount
  • componentDidMount
  • componentWillReceiveProps
  • shouldComponentUpdate
  • componentWillUpdate
  • componentDidUpdate
  • componentWillUnmount

Oh and one more thing...

Take 2: Functional Programming

Functions as First Class Citizens

You focus on VERBs, not NOUNs

So, it's eat(cat, rat), NOT cat.eat(rat)

...some pointers

  • Lambda Calculus
  • Higher Order Functions
  • Closure
  • Pure Functions

Higher Order Functions

  • Functions can take functions in
  • Functions can return function bodies
  • Also called Functor, Functional Form etc
  • map, reduce, filter etc.

Closures

  • A data structure storing a function
  • A function body that has its local variable snapshots remembered per call
  • That's how Clojure got its name?

Take 3: State Management

Brace yourselves... Flux MobX

Observables all the way...

How???

  • Mark something as `observable`
  • Mark your React Component as `observer`
  • Change the `observable` via action
  • All `observer`-s who were `observing` that `observable` reacts accordingly.
  • That simple!

Illustration...

class Person {
  @observable firstName = "Michel";
  @observable lastName = "Weststrate";
  @observable nickName;
  
  @computed get fullName() {
    return this.firstName + " " + this.lastName;
  }
}

const user = new Person();

@observer
class PersonComponent extends Component {
  render() {
    return <div>
      {user.fullName} + ({user.nickName || "-"})
    </div>
  }    
}

setTimeout(() => user.nickName = "mafinar", 5000)

One more example...

import React, {Component} from 'react'
import {observable} from 'mobx'
import {observer} from 'mobx-react'


@observer
class CounterComponent extends Component {
    @observable counter = 0

    render() {
        return <div>
            <div onClick={() => ++this.counter}>(+)</div>
            <div onClick={() => this.counter = 0}>{this.counter}</div>
            <div onClick={() => --this.counter}>(-)</div>
        </div>
    }
}

Observable makes things reactive
Observer makes containers react to subscribed observables

Will I cover Flux, Redux etc?

No.

Now What???

Friendly Links...

...and that's IT!

Thanks...

React Made Easy

By Mafinar Khan

React Made Easy

My keynote slides for developer's conference 2016

  • 1,472