{"id":2776,"date":"2016-05-13T18:46:50","date_gmt":"2016-05-13T18:46:50","guid":{"rendered":"http:\/\/www.ckl.io\/?p=2776"},"modified":"2022-07-01T17:57:26","modified_gmt":"2022-07-01T17:57:26","slug":"dont-blame-the-framework-angularjs-and-reactjs","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/","title":{"rendered":"Don&#8217;t blame the framework: my experience with AngularJS and ReactJS"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">In the past few years, websites have evolved into complex web applications, and what once was land of simple business informative pages, now is home to Facebook, Slack, Spotify and Netflix, changing the way you communicate, listen to music or&nbsp;watch movies. Front-end development has reached a new level and now requires more attention than it used to.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Just as for many front-end developers, our stack used to consist&nbsp;of HTML and jQuery. We would do AJAX requests to our backend, render the new chunk of UI on JavaScript and insert it into the DOM. User actions were tracked by binding events and callbacks to each of the elements. And don&#8217;t take me wrong: this is just fine for most applications.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, when an application grows considerably, a <a href=\"https:\/\/reinteractive.net\/posts\/186-lessons-learnt-by-building-single-page-applications\" target=\"_blank\" rel=\"noopener\">couple of issues<\/a> start being more frequent than expected: you forget to update all places where a value is displayed in the UI, no events are&nbsp;bound&nbsp;to the content added by AJAX, just to name some &#8212; this list can be very long. These are signs that your code is not maintainable, especially when&nbsp;developing together with a team. Using a front-end framework provides a formal way to write collaborative code that you can read, write and update.<\/span><\/p>\n<p><!--more--><\/p>\n<p><img decoding=\"async\" class=\"wp-image-2790 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/write_code.gif\" alt=\"write_code\" width=\"356\" height=\"199\"><\/p>\n<h2>1. The Dawn of React<\/h2>\n<p><span style=\"font-weight: 400;\">When our team first felt the necessity of applying a front-end framework, we put some options on the table and it came down to \u2013 guess what? \u2013&nbsp;<a href=\"https:\/\/angularjs.org\/\" target=\"_blank\" rel=\"noopener\">Angular<\/a> and <a href=\"https:\/\/facebook.github.io\/react\/\" target=\"_blank\" rel=\"noopener\">React<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Angular was by far the most mature candidate: it had a big community and you could find third-party modules for most of the common use cases.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">React was giving the first big steps, its JavaScript-centric code was promising and it was fast. Although still on beta, the &#8220;developed by Facebook&#8221; label&nbsp;backed it up.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We decided to give it a shot and start using React.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the beginning, it was really satisfying to do everything using JavaScript: display a chunk of HTML or not, render lists by iterating over an actual array. It was also good to change a variable value and see it propagating to all parts of code via <a href=\"https:\/\/facebook.github.io\/react\/docs\/transferring-props.html\" target=\"_blank\" rel=\"noopener\">props<\/a> (one of React components attributes), to break everything down to <a href=\"https:\/\/facebook.github.io\/react\/docs\/reusable-components.html\" target=\"_blank\" rel=\"noopener\">reusable components<\/a> and to really <a href=\"https:\/\/facebook.github.io\/react\/docs\/thinking-in-react.html\" target=\"_blank\" rel=\"noopener\">stop and think<\/a> before getting our hands dirty with code. It gave us the consistency we needed to develop maintainable code as a team.<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-2789 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/teamwork_1.gif\" alt=\"teamwork_1\" width=\"366\" height=\"203\"><\/p>\n<h2>2. React + Flux = \u2665<\/h2>\n<p><span style=\"font-weight: 400;\">But down the road, not everything is unicorns and rainbows. The first big challenge we faced &#8212; and the one that really put us to think if using React was worth it &#8212; was a callbacks maze.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Because of its one-way-data-flow nature, a child component needs to receive a <a href=\"https:\/\/facebook.github.io\/react\/tips\/communicate-between-components.html\" target=\"_blank\" rel=\"noopener\">callback to trigger a state change<\/a> on the parent component. It doesn&#8217;t seem a big deal until you realize that your child component that&nbsp;is way down the cascade, now needs to update the state of the root component. You have to go over all files and pass the &#8220;this.props.updateCallback&#8221; down the stream line.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Despite this, we liked React and kept working with it. An effort that paid off: we met <a href=\"https:\/\/facebook.github.io\/flux\/\" target=\"_blank\" rel=\"noopener\">Flux<\/a>, an architecture to enforce and formalize the unidirectional flow of data. It consists of <a href=\"https:\/\/facebook.github.io\/flux\/docs\/overview.html#structure-and-data-flow\" target=\"_blank\" rel=\"noopener\">four main elements<\/a>:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Store: where data (application state) is stored;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Action: triggers a state change;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Dispatcher: manages and routes actions to the right stores;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">View: present data in the store and send out actions &#8212; here is where React is <em>de-facto<\/em>&nbsp;used!<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">With Flux, there&#8217;s no need to keep the state on a root component and pass update callbacks to its children. React components get&nbsp;data from the&nbsp;store directly and change the state&nbsp;by calling actions: it&#8217;s simple, elegant and prevents you from becoming insane. Flux adds a predictable behavior and some standards to the highly non-opinionated React code.<\/span><\/p>\n<h2>3. A wild Angular appears&#8230;<\/h2>\n<p><span style=\"font-weight: 400;\">&#8230;It uses HTML-centric code and <a href=\"http:\/\/knowyourmeme.com\/memes\/its-super-effective\" target=\"_blank\" rel=\"noopener\">it&#8217;s&nbsp;NOT&nbsp;super effective<\/a>.<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-2787 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/pokemon_effective.jpg\" alt=\"pokemon_effective\" width=\"256\" height=\"232\"><\/p>\n<p><span style=\"font-weight: 400;\">Recently, I started working on an Angular project. A big part of it was already implemented, so there was no going back, I had to do it. As a loyal React developer, I complained about Angular. I literally cursed it &#8212; even if those were the first Angular lines of code I was professionally writing. After all, that&#8217;s the way it works: <a href=\"https:\/\/medium.com\/@jeffwhelpley\/screw-you-angular-62b3889fd678#.oy3ij6ft3\" target=\"_blank\" rel=\"noopener\">if you love&nbsp;React, you hate Angular<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">And I can&#8217;t lie to myself, in the beginning I was not enjoying to work on Angular code. Embedding all those framework-specific attributes (or better, directives) to HTML didn&#8217;t feel right. I was struggling to get simple things done, like changing the <a href=\"https:\/\/github.com\/angular\/angular.js\/issues\/1699\" target=\"_blank\" rel=\"noopener\">URL without reloading the controller<\/a> or do basic templating.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The struggle continued when I had problems in my forms because of <\/span><i><span style=\"font-weight: 400;\"><a href=\"https:\/\/docs.angularjs.org\/api\/ng\/directive\/ngIf\" target=\"_blank\" rel=\"noopener\">ngIf<\/a><\/span><\/i><span style=\"font-weight: 400;\"> directive creating a new child scope for it. Or when I wanted to remove blank fields from a JSON being sent to the server and it removed that data from the UI as well &#8212; oh I see, two-way data binding. Or when I wanted to use <\/span><i><span style=\"font-weight: 400;\"><a href=\"https:\/\/docs.angularjs.org\/api\/ng\/directive\/ngShow\" target=\"_blank\" rel=\"noopener\">ngShow<\/a><\/span><\/i><span style=\"font-weight: 400;\"> and <\/span><i><span style=\"font-weight: 400;\"><a href=\"https:\/\/docs.angularjs.org\/api\/ng\/directive\/ngHide\" target=\"_blank\" rel=\"noopener\">ngHide<\/a><\/span><\/i><span style=\"font-weight: 400;\"> to display an HTML block and hide another and, for that hundredth of a second, both are displayed simultaneously. I understand many of these issues were my fault \u2013what I want to point out is that Angular is not predictable, it&#8217;s full of these surprises.<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-2797 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/struggle.gif\" alt=\"struggle\" width=\"422\" height=\"180\"><\/p>\n<p><span style=\"font-weight: 400;\">But of course, a lot of things were easier to do with&nbsp;Angular. The <a href=\"https:\/\/docs.angularjs.org\/api\/ng\/service\/$http\" target=\"_blank\" rel=\"noopener\">built-in HTTP requests module<\/a> is really good, as well as the promises support. Another thing that I can&#8217;t complain at all: the <a href=\"https:\/\/docs.angularjs.org\/api\/ng\/type\/ngModel.NgModelController\" target=\"_blank\" rel=\"noopener\">built-in form controllers<\/a>! Input fields have default routines for formatting, parsing and validating fields, as well as a good plugin to display error messages. <\/span><\/p>\n<p>By using Angular it&#8217;s also easier to work with a design team. In our team, there was an engineer&nbsp;dedicated to write HTML and CSS, and Angular enabled us to work together really seamlessly: he would worry about the HTML and a few extra tags, while I&#8217;d handle the logic. If we were using React, it&#8217;d be at least more challenging for him to write components, since he&#8217;d have to learn the basics of JSX (or I&#8217;d have to copy and paste his work myself).<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Remember the URL-replacing and templating issue that I mentioned before? Nevermind, found out that people normally use a different routing library (<a href=\"https:\/\/github.com\/angular-ui\/ui-router\" target=\"_blank\" rel=\"noopener\">ui-router<\/a>) that does a better work &nbsp;than the standard one (<a href=\"https:\/\/docs.angularjs.org\/api\/ngRoute\" target=\"_blank\" rel=\"noopener\">ngRoute<\/a>). In&nbsp;the end, Angular was not as bad as I expected. Most things that I complained about in the beginning were either because I was forcing the React way of doing things to Angular code or because I wasn&#8217;t experienced enough.&nbsp;<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-2793 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/obama_not_bad.gif\" alt=\"obama_not_bad\" width=\"393\" height=\"221\"><\/p>\n<h2>4. Bottom line: AngularJS and ReactJS<\/h2>\n<p><span style=\"font-weight: 400;\">React uses the native JavaScript functions to allow developers to create reusable components with a predictable lifecycle and unidirectional data-flow. Combined with Flux architecture (or one of its variations &#8212; i.e. Redux) it&#8217;s reliable, which makes it easier to work with a team on the long-run &#8212; without the constant fear of solving a bug and creating ten others. But it might be an overhead when you have people with expertise on HTML and CSS only, since it changes the traditional development flow. It&#8217;s also very dependent on the modules you choose to compose your stack.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Angular, on the other hand, focuses on the design simplicity of two-way data binding &#8212; what you change on the controller scope will (I&#8217;d say auto-magically) show up in&nbsp;the UI. Its opinionated nature saves setup time, by laying some patterns on how to organize the code and making it unnecessary to choose core modules from hundreds of options. However, the same way that with two-way data binding it&#8217;s simpler to develop, it&#8217;s also easier to create unexpected bugs when changing parts of code in&nbsp;the long run &#8212; especially that colleague&#8217;s code that hasn&#8217;t been touched in the past few months.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">And then, what would I choose to build an app from scratch?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For the long term, I, personally, would choose React, using <a href=\"http:\/\/redux.js.org\/\" target=\"_blank\" rel=\"noopener\">Redux<\/a> architecture, <a href=\"https:\/\/github.com\/mzabriskie\/axios\" target=\"_blank\" rel=\"noopener\">Axios<\/a> for promise-ready HTTP requests and <a href=\"https:\/\/github.com\/reactjs\/react-router\" target=\"_blank\" rel=\"noopener\">react-router<\/a>. But it also depends on the&nbsp;team experience: if there&#8217;s a dedicated person for writing HTML and CSS, I would go with Angular for sure. <\/span><span style=\"font-weight: 400;\">Both of them have pros and cons and what still counts the most for a maintainable project is the developers&#8217; commitment to write good and organized code.<\/span><\/p>\n<p><img decoding=\"async\" class=\"size-full wp-image-2810 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/At-the-end-Angular-was-not-as-bad-as-I-expected..gif\" alt=\"At the end, Angular was not as bad as I expected.\" width=\"500\" height=\"200\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the past few years, websites have evolved into complex web applications, and what once was land of simple business informative pages, now is home to Facebook, Slack, Spotify and Netflix, changing the way you communicate, listen to music or&nbsp;watch movies. Front-end development has reached a new level and now requires more attention than it [&hellip;]<\/p>\n","protected":false},"author":65,"featured_media":2936,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[432,1162,7],"tags":[305,303,302],"class_list":["post-2776","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","category-process","category-opinion","tag-tag-development","tag-tag-frontend","tag-tag-reactjs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Don&#039;t blame the framework: my experience with AngularJS and ReactJS<\/title>\n<meta name=\"description\" content=\"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer&#039;s perspective.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Don&#039;t blame the framework: my experience with AngularJS and ReactJS\" \/>\n<meta property=\"og:description\" content=\"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer&#039;s perspective.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-13T18:46:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-01T17:57:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2076\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\"},\"author\":{\"name\":\"Bernardo Smaniotto\"},\"headline\":\"Don&#8217;t blame the framework: my experience with AngularJS and ReactJS\",\"datePublished\":\"2016-05-13T18:46:50+00:00\",\"dateModified\":\"2022-07-01T17:57:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\"},\"wordCount\":1435,\"commentCount\":15,\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg\",\"keywords\":[\"development\",\"Front-end\",\"ReactJS\"],\"articleSection\":[\"Engineering\",\"Process\",\"Opinion\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\",\"name\":\"Don't blame the framework: my experience with AngularJS and ReactJS\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg\",\"datePublished\":\"2016-05-13T18:46:50+00:00\",\"dateModified\":\"2022-07-01T17:57:26+00:00\",\"author\":{\"@type\":\"person\",\"name\":\"Bernardo Smaniotto\"},\"description\":\"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer's perspective.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg\",\"width\":2076,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Don&#8217;t blame the framework: my experience with AngularJS and ReactJS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"name\":\"Bernardo Smaniotto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/bernardo-300x300.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/bernardo-300x300.jpg\",\"caption\":\"Bernardo Smaniotto\"},\"description\":\"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/autor\/bernardo-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Don't blame the framework: my experience with AngularJS and ReactJS","description":"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer's perspective.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/","og_locale":"en_US","og_type":"article","og_title":"Don't blame the framework: my experience with AngularJS and ReactJS","og_description":"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer's perspective.","og_url":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2016-05-13T18:46:50+00:00","article_modified_time":"2022-07-01T17:57:26+00:00","og_image":[{"width":2076,"height":720,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg","type":"image\/jpeg"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Written by":null,"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/"},"author":{"name":"Bernardo Smaniotto"},"headline":"Don&#8217;t blame the framework: my experience with AngularJS and ReactJS","datePublished":"2016-05-13T18:46:50+00:00","dateModified":"2022-07-01T17:57:26+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/"},"wordCount":1435,"commentCount":15,"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg","keywords":["development","Front-end","ReactJS"],"articleSection":["Engineering","Process","Opinion"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/","url":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/","name":"Don't blame the framework: my experience with AngularJS and ReactJS","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg","datePublished":"2016-05-13T18:46:50+00:00","dateModified":"2022-07-01T17:57:26+00:00","author":{"@type":"person","name":"Bernardo Smaniotto"},"description":"Here are the key impacts in the long run of choosing between AngularJS and ReactJS, from a seasoned developer's perspective.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/05\/angular_react51.jpg","width":2076,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/dont-blame-the-framework-angularjs-and-reactjs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Don&#8217;t blame the framework: my experience with AngularJS and ReactJS"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/","name":"Cheesecake Labs","description":"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","name":"Bernardo Smaniotto","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/bernardo-300x300.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/bernardo-300x300.jpg","caption":"Bernardo Smaniotto"},"description":"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.","url":"https:\/\/cheesecakelabs.com\/blog\/autor\/bernardo-2\/"}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/2776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/comments?post=2776"}],"version-history":[{"count":1,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/2776\/revisions"}],"predecessor-version":[{"id":10346,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/2776\/revisions\/10346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media\/2936"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media?parent=2776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/categories?post=2776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/tags?post=2776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}