jQuery / AngularJS / React

Que choisir entre ?

Javascript

1995

var xhr;
try {
  xhr = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
  try {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
  } catch (e2) {
    try {
      xhr = new XMLHttpRequest();
    } catch (e3) {
      xhr = false;
    }
  }
}

xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    if (xhr.status == 200) {
      "ok";
    }
  }
};

xhr.open("GET", "data.xml", true);
xhr.send(null);

jQuery

2006

Script.aculo.us, Mootools, YUI

var xhr;
try {
  xhr = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
  try {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
  } catch (e2) {
    try {
      xhr = new XMLHttpRequest();
    } catch (e3) {
      xhr = false;
    }
  }
}

xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    if (xhr.status == 200) {
      "ok";
    }
  }
};

xhr.open("GET", "data.xml", true);
xhr.send(null);
$.get( "data.xml", function( data ) {
  "ok"
});

Javascript pure

jQuery


$.post('/login', credentials, function( user ) {
    $('.user-notlogged').hide();
    $('.user').show();
    $('.user__firstname').text(user.firstname);
    $('.user__lastname').text(user.lastname);
});
<header>  
    <div class="user-notlogged">Not logged in</div>
    <div class="user">
        <div class="user__firstname"></div>
        <div class="user__lastname"></div>
    </div>
</header>

jQuery

AngularJS

2009

Backbonejs (2010), Embersjs (2011)


app.controller('UserCtrl', function ($scope, $http) {

  $scope.user = false

  $http.post('/login').success(function(user) {
    $scope.user = user;
  });

});
<header>  
    <div class="user-notlogged" ng-hide="user">Not logged in</div>
    <div class="user" ng-show="user">
        <div class="user__firstname">{{ user.firstname }}</div>
        <div class="user__lastname">{{ user.lastname }}</div>
    </div>
</header>

AngularJS

ReactJS

2013

RiotJS (2014), VueJS (2015)

var Timer = React.createClass({
  getInitialState: function() {
    return {secondsElapsed: 0};
  },
  tick: function() {
    this.setState({secondsElapsed: this.state.secondsElapsed + 1});
  },
  componentDidMount: function() {
    this.interval = setInterval(this.tick, 1000);
  },
  componentWillUnmount: function() {
    clearInterval(this.interval);
  },
  render: function() {
    return (
      <div>Seconds Elapsed: {this.state.secondsElapsed}</div>
    );
  }
});

ReactDOM.render(<Timer />, mountNode);

ReactJS

Redux

2015

Flux


import { createStore } from 'redux'

function counter(state = 0, action) {
  switch (action.type) {
  case 'INCREMENT':
    return state + 1
  case 'DECREMENT':
    return state - 1
  default:
    return state
  }
}

let store = createStore(counter)

store.subscribe(() =>
  console.log(store.getState())
)

store.dispatch({ type: 'INCREMENT' })
store.dispatch({ type: 'INCREMENT' })
store.dispatch({ type: 'DECREMENT' })

Redux

2017

Choisir l'outil qui correspond à votre besoin

deck

By Jonathan Boyer

deck

  • 1,404