<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 8base</title>
    <description>The latest articles on DEV Community by 8base (@8base).</description>
    <link>https://dev.to/8base</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F608%2F48439141-2634-4d31-9d81-7e04cd917fb4.png</url>
      <title>DEV Community: 8base</title>
      <link>https://dev.to/8base</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/8base"/>
    <language>en</language>
    <item>
      <title>Generate React app with GraphQL backend in minutes</title>
      <dc:creator>Andrei Anisimov</dc:creator>
      <pubDate>Tue, 16 Apr 2019 13:27:00 +0000</pubDate>
      <link>https://dev.to/8base/generate-react-app-with-graphql-backend-in-minutes-1651</link>
      <guid>https://dev.to/8base/generate-react-app-with-graphql-backend-in-minutes-1651</guid>
      <description>&lt;p&gt;A new experimental feature in 8base CLI generates a working React app from your data model. This is great for getting started with GraphQL and React or for quickly generating an admin UI for your app. Similar to scaffolding in Ruby-on-Rails. &lt;/p&gt;

&lt;p&gt;The generated React app is based on &lt;code&gt;Create React App&lt;/code&gt;, uses &lt;code&gt;Apollo Client&lt;/code&gt; for GraphQL requests and includes authentication powered by &lt;code&gt;Auth0&lt;/code&gt; as well as the ability to upload files.&lt;/p&gt;

&lt;p&gt;Few simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Define your data model in &lt;a href="https://www.8base.com/" rel="noopener noreferrer"&gt;8base&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmzh4o41e6cqtcwseuho.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmzh4o41e6cqtcwseuho.gif" alt="Define your data model" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.8base.com/docs/cli-install" rel="noopener noreferrer"&gt;Install open-source 8base CLI&lt;/a&gt; using &lt;code&gt;npm&lt;/code&gt; and run &lt;code&gt;8base login&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;8base generate app ${YOU_APP_NAME}&lt;/code&gt; to generate app template&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;8base generate scaffold ${TABLE_NAME}&lt;/code&gt; to generate CRUD UI for chosen data table (you can repeat this step for each table you want to add)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;yarn install &amp;amp;&amp;amp; yarn start&lt;/code&gt; to start the app&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All terminal steps combined:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foscg5d620gfm5n2mbvze.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foscg5d620gfm5n2mbvze.gif" alt="Generate React code" width="1120" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a demo of a React app that gets generated:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscpewt6ln98gik2yllab.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscpewt6ln98gik2yllab.gif" alt="Start app" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know your thoughts and happy generating! More info &lt;a href="https://www.8base.com/generate" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;P.S. 8base is currently in beta and is completely free. It will forever remain free for small dev teams.&lt;/p&gt;

</description>
      <category>react</category>
      <category>graphql</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Tutorial: Building TodoMVC with React and 8base GraphQL API</title>
      <dc:creator>Andrei Anisimov</dc:creator>
      <pubDate>Fri, 22 Feb 2019 20:47:50 +0000</pubDate>
      <link>https://dev.to/8base/tutorial-building-todomvc-with-8base-and-graphql-1nee</link>
      <guid>https://dev.to/8base/tutorial-building-todomvc-with-8base-and-graphql-1nee</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jMkG7rVe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A2O1B3d5Pda95Isjc8OUN_w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jMkG7rVe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A2O1B3d5Pda95Isjc8OUN_w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads"&gt;git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/get-npm"&gt;npm&lt;/a&gt; or &lt;a href="https://yarnpkg.com/lang/en/docs/install/#mac-stable"&gt;yarn&lt;/a&gt; (we use yarn here, but you can use npm if you prefer)&lt;/li&gt;
&lt;li&gt;Familiarity with &lt;a href="https://reactjs.org/"&gt;React.js&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;In this tutorial I’ll show you how to use &lt;a href="https://www.8base.com/"&gt;8base&lt;/a&gt; to quickly create a GraphQL API and connect to it from a React app. 8base is a Developer Acceleration Platform offering a plethora of features to help front-end developers build applications faster and simpler than ever before. With 8base, there is no need to rely on back-end developers or DevOps!&lt;/p&gt;

&lt;p&gt;Using the 8base platform, you can build your backend using a simple GUI that allows you to perform actions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define your Schema: create tables/ table relationships&lt;/li&gt;
&lt;li&gt;Upload files&lt;/li&gt;
&lt;li&gt;Define roles&lt;/li&gt;
&lt;li&gt;Manage various projects using “Workspaces”&lt;/li&gt;
&lt;li&gt;Design queries using the API explorer (based on GraphQL)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I believe that the best way to illustrate the utility of 8base is to show interested users how it can be integrated with projects they are already working on. By connecting a simple Todo MVC app to an 8base backend, we’ll learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate the 8base UI as well as create new workspaces and tables&lt;/li&gt;
&lt;li&gt;Define role permissions&lt;/li&gt;
&lt;li&gt;Write queries using GraphQL&lt;/li&gt;
&lt;li&gt;Access your data via a React.js front-end using the 8base SDK&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Intended Audience
&lt;/h3&gt;

&lt;p&gt;This tutorial is aimed mostly toward users who are new to 8base and don’t have much prior experience with GraphQL. If you are familiar with GraphQL, connecting to your 8base backend should be a somewhat familiar process. Otherwise, everyone is encouraged to follow this tutorial to see 8base’s recommended implementation using the 8base SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparing the Environment/ 8base UI
&lt;/h3&gt;

&lt;p&gt;The developers at 8base created this platform with the intention of making something that they would want to use. As you navigate the 8base UI, you’ll notice that plenty of time and care were put into creating this platform to assure that the development experience would be pleasantly intuitive and that elements within the application are fluid and responsive in a modern way. In this tutorial, we will only use a few features offered by 8base, but I highly encourage you to explore the entirety of the platform and utilize other tools in the suite.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create an accoun&lt;/strong&gt; t on &lt;a href="https://8base.com/"&gt;8base&lt;/a&gt; &lt;em&gt;(8base starts as a free to use platform and pricing changes as usage increases. See pricing details&lt;/em&gt; &lt;a href="https://www.8base.com/pricing"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. You will be asked to verify your email and then redirected to the 8base UI).&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Once you are in the 8base UI, simply &lt;strong&gt;navigate to “Data” and click on “New Table”&lt;/strong&gt; to start building your backend. After your new table is loaded, you’ll be taken to the Schema in order to begin defining fields. Let’s take a look around and note a couple of things. On the left, you’ll see there are System Tables and Your Tables. Every new 8base workspace automatically comes prepackaged with a number of built-in Tables. These tables are used to handle things like Files, Settings, and Permissions and can all be accessed through the 8base GraphQL API. For now, the only system table that is exposed via the UI is Users, but you can find a complete list of 8base system tables by using the query tablesList in the API Explorer.&lt;/li&gt;
&lt;li&gt;Go ahead and &lt;strong&gt;create a table&lt;/strong&gt; Todo with fields text (field type: TEXT), completed (field type: SWITCH, format: Yes/No). &lt;em&gt;Switch is a particularly interesting field type. At first, it may seem like a boolean value, but the switch field is actually able to handle multiple options, and therefore allows for a lot of flexibility. However, for the sake of this project, we will simply be using Yes/No.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Next, &lt;strong&gt;copy the API endpoint URL&lt;/strong&gt; (available on the bottom left) — this is your main line of communication between your front end and your 8base backend (you’ll need it later where it says 8BASE_API_URL).&lt;/li&gt;
&lt;li&gt;Finally, for the purpose of this tutorial we’re going to &lt;strong&gt;allow open access to Guests&lt;/strong&gt; by default so that dealing with authentication is optional. To allow guest access to your new Todo table, navigate to Settings &amp;gt; Roles &amp;gt; Guest and check the appropriate boxes under Todo. &lt;em&gt;All unauthenticated users who access your API endpoint are given the role of&lt;/em&gt; &lt;em&gt;Guest by default. Authentication is not covered in this tutorial. You can see how authentication should be handled in more detail &lt;a href="https://docs.8base.com/docs/authentication"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9oXpOK-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AKd0z58jTVcR2oyT-BBiNIQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9oXpOK-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AKd0z58jTVcR2oyT-BBiNIQ.png" alt=""&gt;&lt;/a&gt;&lt;em&gt;Make sure your guest permissions for Todos match the ones above&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now that you’ve prepared your backend, let’s head over to the 8base &lt;a href="https://github.com/8base-examples/todomvc"&gt;TodoMVC repo&lt;/a&gt; to prepare our client application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the TodoMVC repo and run git checkout workshop to switch into the workshop branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The master branch contains the completed code for this project so you will be unable to follow along with the tutorial if you don’t complete this step.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install dependencies:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @8base/app-provider graphql graphql-tag react-apollo &amp;amp;&amp;amp; yarn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test that the app works without backend: yarn start&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QyEriv8q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AqvTFzoUgTA-anWaPb9cqPA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QyEriv8q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AqvTFzoUgTA-anWaPb9cqPA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(Optional) Setup VS Code &lt;a href="https://marketplace.visualstudio.com/items?itemName=apollographql.vscode-apollo"&gt;Apollo GraphQL&lt;/a&gt; extension: Create the file apollo.config.js in the root of the project with the following content (replace 8BASE_API_URL with your API endpoint URL):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;8base&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;8BASE&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s1"&gt;_API&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s1"&gt;_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;*.{ts,tsx,js,jsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The Apollo GraphQL extension for VS code provides validation and autocomplete for writing GraphQL queries.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting the Backend
&lt;/h3&gt;

&lt;p&gt;The application repo that we set up has the following code built in, so you can focus on understanding what’s going on. In instances where you have to add code, just uncomment what is specified. In instances where the code has to be removed, the specified code is appended by the comment //Remove this in the code base.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that all relevant code in this tutorial will be placed in the file src/App.js — this is not best practice using React but has been done this way to simplify the tutorial.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Import GraphQL-related dependencies&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;gql&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;graphql-tag&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-apollo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EightBaseAppProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@8base/app-provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You’ll see here not only are we importing gql and graphql, but we are also importing EightBaseAppProvider from the 8base SDK. The 8base SDK makes integration with 8base and GraphQL simple. We've done this by taking a lot of the boilerplate/setup-code and packaging it inside the SDK, so all the developer needs to do is wrap their application in the &amp;lt;EightBaseAppProvider&amp;gt; tag and pass it the appropriate props to allow data access to all the child components. EightBaseAppProvider uses &lt;a href="https://www.apollographql.com/docs/react/"&gt;Apollo Client&lt;/a&gt;, so if you are familiar with it already, there is nothing new to learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Initialize&lt;/strong&gt;  &lt;strong&gt;EightBaseAppProvider&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EightBaseAppProvider&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ENDPOINT_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;"Loading..."&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todoapp"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="si"&gt;}&lt;/span&gt;)}
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;EightBaseAppProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You need to provide a function as a child of EightBaseAppProvider that will tell React what we want to render. We can use the loading property to display a loader while the application is being initialized. During the initialization, EightBaseAppProvider loads the 8base table schema which gives you access to all properties of the data model inside your front end code. We'll touch on this feature more in-depth in a future tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Add a Query to Fetch todos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query and HOC &lt;a href="https://reactjs.org/docs/higher-order-components.html"&gt;(Higher-Order Component)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gql&lt;/span&gt;&lt;span class="s2"&gt;`
  query TodoList {
    todosList(orderBy: [completed_ASC, createdAt_DESC]) {
      items {
        id
        text
        completed
      }
    }
  }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;todosList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In the code above, we are creating a Higher-Order Component using the graphql() function provided by &lt;a href="https://www.apollographql.com/docs/react/"&gt;react-apollo&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;a href="https://www.apollographql.com/docs/react/api/react-apollo.html#graphql"&gt;react-apollo&lt;/a&gt; — The graphql() function is the most important thing exported by react-apollo. With this function you can create higher-order components that can execute queries and update reactively based on the data in your Apollo store. The graphql() function returns a function which will “enhance” any component with reactive GraphQL capabilities. This follows the React higher-order component pattern which is also used by react-redux’s connect function.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essentially, by using graphql() we are able to write the code to query our backend in one place and inject this functionality into multiple components rather than writing it everywhere we want to be able to use it. The graphql function takes a query as its first parameter, config as the second, and the return value is a HOC that should be executed with the desired component as an argument. Note that in our example, we use the config parameter ingraphql() to specify that our data will be accessible as props.todos rather than props.data.todosList.items. As for our TODO_LIST_QUERY, we've already given you the appropriate syntax, but typically we might design our queries in the &lt;em&gt;8base API Explorer&lt;/em&gt;. If you navigate to the API Explorer and copy/paste the TODO_LIST_QUERY, you can see what data will be returned. Experiment with this query and see other ways that data can be returned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y2SnUXIS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWtuMwVMPyfXCgubcEw2c4Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y2SnUXIS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWtuMwVMPyfXCgubcEw2c4Q.png" alt=""&gt;&lt;/a&gt;&lt;em&gt;8base API Explorer&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrap Main and Footer into withTodos
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;withRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withTodos&lt;/span&gt; &lt;span class="c1"&gt;// Add this&lt;/span&gt;
&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Footer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;withRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withTodos&lt;/span&gt; &lt;span class="c1"&gt;// Add this&lt;/span&gt;
&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;Footer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ultimately in our example, we want to display all the data from our 8base backend in the Main component and the Footer component. In the code above we are using the compose() function provided by the lodash library to chain multiple Higher-Order Components together, giving our target components the functionality from each HOC. You can read more about how the compose() function works &lt;a href="https://redux.js.org/api/compose"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove the code that passes down the todos prop to the Main and Footer components
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Main&lt;/span&gt;
   &lt;span class="na"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt; &lt;span class="si"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
   &lt;span class="err"&gt;...&lt;/span&gt;

&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;Footer&lt;/span&gt;
   &lt;span class="na"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt; &lt;span class="si"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;When we first set up our application, all Todos were held in state because we were not connected to a backend. Our components still need to access the todos props, but we no longer have to pass it down explicitly because they are provided by withTodos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Add a Query to Create a todo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CREATE_TODO_MUTATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gql&lt;/span&gt;&lt;span class="s2"&gt;`
  mutation TodoCreate($data: TodoCreateInput!) {
    todoCreate(data: $data) {
      id
      text
      completed
    }
  }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withCreateTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;CREATE_TODO_MUTATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;mutate&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;createTodo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;refetchQueries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here we are repeating the process we took previously to query our 8base backend, only this time we are using GraphQL mutation to create a Todo and then calling refetchQueries to update the state of our application with our newly added data. This will allow new data to populate throughout the application without having to make a separate request to our backend.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrap Header
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;withCreateTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The syntax above illustrates the enhancement of the Header component using our HOC. Note that withCreateTodo acts as a function, the Header component is passed to the function as an argument and the enhanced component is then set to the variable Header to be used in our application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove createTodo from Header
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Header&lt;/span&gt;
   &lt;span class="nx"&gt;createTodo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createTodo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Add a Query to update todos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mutation and HOC
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TOGGLE_TODO_MUTATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gql&lt;/span&gt;&lt;span class="s2"&gt;`
  mutation TodoToggle($id: ID!, $completed: Boolean!) {
    todoUpdate(filter: { id: $id }, data: {
       completed: $completed
    }) {
      id
      text
      completed
    }
  }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withToggleTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TOGGLE_TODO_MUTATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;mutate&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;toggleTodo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;refetchQueries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Wrap Main in withToggleTodo
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;withRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withTodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withToggleTodo&lt;/span&gt;  &lt;span class="c1"&gt;// Add this&lt;/span&gt;
&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove toggleTodo from Main
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;
   &lt;span class="nx"&gt;toggleTodo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toggleTodo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Above we’ve repeated the previous pattern to add functionality to the Main component. This will give the user the ability to toggle Todos as complete or incomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Add a Query to mark all todos as complete&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We only need a new HOC, we can reuse the mutation. All mutations in the loop will be batched in a single request.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withToggleAllTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TOGGLE_TODO_MUTATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ownProps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;todos&lt;/span&gt; &lt;span class="p"&gt;}})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;toggleAllTodos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;      
      &lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
          &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="na"&gt;refetchQueries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;        
      &lt;span class="p"&gt;});&lt;/span&gt;      
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Wrap Main in withToggleAllTodos
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;withRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withTodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withToggleTodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withToggleAllTodos&lt;/span&gt; &lt;span class="c1"&gt;// Add this&lt;/span&gt;
&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove toggleAllTodos from Main
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;
   &lt;span class="nx"&gt;toggleAllTodos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toggleAllTodos&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Add a Query to delete todos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mutation and HOC
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DELETE_TODO_MUTATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gql&lt;/span&gt;&lt;span class="s2"&gt;`
  mutation TodoDelete($id: ID!) {
    todoDelete(filter: { id: $id }) {
      success
    }
  }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withRemoveTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DELETE_TODO_MUTATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;mutate&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;removeTodo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;refetchQueries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TODO_LIST_QUERY&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Wrap Main in withRemoveTodo
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;withRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withTodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withToggleTodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;withRemoveTodo&lt;/span&gt; &lt;span class="c1"&gt;// Add this&lt;/span&gt;
&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove removeTodo from Main
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Main&lt;/span&gt;
   &lt;span class="nx"&gt;removeTodo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeTodo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Remove this&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As you can see, once you understand the basic pattern of enhancing components using the graphql() HOC, it becomes fairly simple to write new queries that can be easily accessed throughout your application.&lt;/p&gt;

&lt;p&gt;Finally, test that your application works properly by navigating to the root directory and running yarn start.&lt;/p&gt;

&lt;p&gt;You should now be able to create, update and destroy Todos that are persisted to the database.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To see 8base working in action, open up your 8base workspace in a separate tab and open the &lt;em&gt;Data Viewer&lt;/em&gt; on the Todos table. You should see all the data from your application in this window. Create new Todos in your application and refresh the page to see them in your database!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4scmZdga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AkYA02Tq9ob9pIkD8cdA43w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4scmZdga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AkYA02Tq9ob9pIkD8cdA43w.png" alt=""&gt;&lt;/a&gt;8base Data Viewer&lt;/p&gt;

&lt;p&gt;8base is currently working on implementations using other frameworks and libraries. We currently have examples using &lt;a href="https://github.com/8base/app-example"&gt;React&lt;/a&gt; and &lt;a href="https://github.com/8base/react-native-app-example"&gt;React-Native&lt;/a&gt; as well as more &lt;a href="https://docs.8base.com/docs/connecting-to-your-frontend"&gt;simple examples&lt;/a&gt; using CURL, Node, and Vanilla JS. Feel free to visit our &lt;a href="https://docs.8base.com/"&gt;Docs&lt;/a&gt;, send a message on our &lt;a href="https://www.8base.com/"&gt;website&lt;/a&gt;, or reach out to me personally with feedback on your experience with 8base.&lt;/p&gt;

&lt;p&gt;Completed example with 8base backend connected can be found in the &lt;a href="https://github.com/8base/todomvc"&gt;master&lt;/a&gt; branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect with us!
&lt;/h3&gt;

&lt;p&gt;To get started with 8base or simply learn more information, visit &lt;a href="http://www.8base.com/"&gt;&lt;strong&gt;www.8base.com&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://docs.8base.com/docs"&gt;&lt;strong&gt;docs.8base.com&lt;/strong&gt;&lt;/a&gt;, follow us on Twitter at &lt;strong&gt;@&lt;/strong&gt; &lt;a href="https://twitter.com/8baseinc"&gt;&lt;strong&gt;8baseinc&lt;/strong&gt;&lt;/a&gt;, or email us directly at &lt;strong&gt;&lt;em&gt;&lt;a href="mailto:info@8base.com"&gt;info@8base.com&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>tutorial</category>
      <category>react</category>
      <category>graphql</category>
      <category>serverless</category>
    </item>
    <item>
      <title>How 8base Works — Serverless, GraphQL, CLI, and More!</title>
      <dc:creator>Andrei Anisimov</dc:creator>
      <pubDate>Wed, 16 Jan 2019 23:54:14 +0000</pubDate>
      <link>https://dev.to/8base/how-8base-worksserverless-graphql-cli-and-more-4icf</link>
      <guid>https://dev.to/8base/how-8base-worksserverless-graphql-cli-and-more-4icf</guid>
      <description>

&lt;p&gt;The separation between back-end and front-end developers has emerged over the last decade as multi-tiered systems have become the norm. In that time, back-end developers have focused on building business logic and provisioning data to front-end developers through REST APIs. In parallel, front-end developers have focused on the user interface. Their ability to empathize with users makes them uniquely qualified to interact with business people to serve their needs.&lt;/p&gt;

&lt;p&gt;The hallmark of a front-end developer is their proficiency in JavaScript. The 2018 StackOverflow Developer Survey shows that almost 70% of developers are proficient in JavaScript, which makes it the most widely used programming language in the world.&lt;/p&gt;

&lt;p&gt;The same survey shows that JavaScript is high on the list of Most Loved Programming Languages with nearly 62% saying they loved it. TypeScript, which is a derivative of JavaScript, scores even higher at 67%.&lt;/p&gt;

&lt;p&gt;8base was specifically designed to give people with JavaScript and TypeScript coding skills the superpowers they need to build end-to-end software without help from other types of professionals for the majority of solutions.&lt;/p&gt;

&lt;p&gt;Let’s walk through a typical software development lifecycle to illustrate how 8base enables a front-end developer to build like a full stack developer and operate like a seasoned DevOps pro:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;10 Ways 8base Enables Front-End Developers to Build Like Full-Stack Developers&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;1. Design&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Work on layout and flow, not drawing.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;User Interface Designers have complete flexibility as to what can be built on 8base; however, 8base provides its Boost UI Kit to assist designers to rapidly prototype beautiful, usable and responsive user interfaces with common UI components that also intelligently talk to the 8base back-end. Although designers and developers benefit from using Boost, they are free to utilize other UI components without constraint. Oftentimes, front-end developers can construct beautiful and functional user interfaces without the help of designers using Boost and other UI kits.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;2. Architecture&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Avoid dogmatic discussions, use the best practice and achieve working value immediately.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;8base delivers a malleable, best-practice architecture out-of-the-box based upon the most modern concepts in cloud computing. Front-end developers can rest assured that built apps benefit from a world-class architecture without having to involve technology architects.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;3. Deployment of Database Infrastructure&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Selection of a database technology is not as important as it used to be. Driving business value is more important.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;8base provisions Amazon Web Services (AWS) databases on demand without requiring a developer to understand all the intricacies of deploying and configuring AWS infrastructure. Developers never need to worry about having enough capacity, as 8base will automatically scale the database to meet their applications’ demands. Data is fully encrypted for security purposes and persisted in a fully redundant, fault-tolerant environment that is backed up frequently.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;4. Deployment of File Infrastructure&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Files mostly live detached from structured business data — enormous value is unlocked when you can easily join them.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;8base provisions AWS file storage capabilities on demand as well. This infrastructure is also secure, unbounded and has embedded intelligence to enable sophisticated file operations out-of-the-box such as image resizing, thumbnails, optical character recognition, facial recognition, and full text search.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;5. Deployment of Computing and Networking Infrastructure&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Shouldn’t computing and networking resources be available to users in the same way electrical power is?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;8base provisions AWS serverless computing and networking capabilities on demand without requiring a developer to understand the intricacies of configuring API gateways, configuring routers, coordinating deployments or even setting up an AWS account. In essence, developers are provided an unlimited source of computing and networking capabilities they can utilize to support front-end requests or run back-end functions.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;6. Database and File Storage Design and Definition&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Front-End Developers are well equipped to design their own data models using 8base tools.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;8base provides its Data Builder toolset to allow front-end developers, who may not possess sophisticated data architecture or data modeling skills, to easily define robust data models. Data models include structured data stored in databases as well as unstructured files that can be easily connected to structured data.&lt;/p&gt;

&lt;p&gt;8base also provides a native data viewing and editing capability that allows for secure, rapid manipulation and testing of data.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;7. Identity Management, Role-Based Security and User Management&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Security is not optional in 2019–8base automatically locks down data so developers can’t forget.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Identity management, role-based security and user management are typically redundant efforts made by developers every time an application is written. Not only are such efforts wasteful, they also tend to expose security vulnerabilities.&lt;/p&gt;

&lt;p&gt;8base offers a full identity management solution that supports over thirty different single-sign-on methods, including developers’ own authentication provider, if desired.&lt;/p&gt;

&lt;p&gt;Comprehensive role-based-access controls that automatically encapsulate each table, field and file in the data model are provided by 8base. The Developer Acceleration Platform allows for configuration and administration of function-level permissions in the user interface of built applications.&lt;/p&gt;

&lt;p&gt;8base enables secure integration with other systems by allowing for configuration of API access tokens to enable authenticated calls from outside services.&lt;/p&gt;

&lt;p&gt;Lastly, 8base provides full role and user definition and related administration screens for built applications.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;8. Back-End Development&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Do we really need to burden back-end developers with writing queries to the database?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We designed 8base so that front-end developers can utilize their favorite IDE and use the languages they normally work with, JavaScript and TypeScript, to author server-side functions. We chose JavaScript because it is the most popular programming language in the world, with 70% of developers being proficient in it. Other platforms have developed their own proprietary programming languages which creates significant up-front training requirements and massive, ongoing vendor lock-in.&lt;/p&gt;

&lt;p&gt;8base delivers a robust CLI (Command Line Interface) that allows developers to write custom logic and deploy it in seconds. Server-side logic is immediately available and can be exposed through GraphQL or REST, triggered in response to data events or executed on schedule. Resolvers, triggers, webhooks and scheduled tasks are all supported.&lt;/p&gt;

&lt;p&gt;Logic execution is fully serverless, creating and destroying compute resources in real-time based upon demand. This means developers and customers don’t have to pay for idle servers when traffic is low or add more servers when its high.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;9. Front-End Development&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Allow the front-end developer to take total control of the process.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Developers can build custom front-end user interfaces in their technology of choice. 8base’s SDK (Software Development Kit) currently supports React and React Native; however, we will be releasing support for Swift (iOS), Android, Angular and Vue.js shortly. Developers can leverage 8base Boost or other UI kits to build fully responsive user interfaces.&lt;/p&gt;

&lt;p&gt;8base provides the most powerful GraphQL API in existence which allows front-end developers to create queries of the exact data they need directly in their code, rather than having to depend on back-end developers to do it for them. In a single query, developers can pull back data from multiple tables and even data sources, while applying advanced filtering, pagination and full-text search. Front-end developers can utilize the popular ApolloClient to consume the API as well as other open-source libraries from the vibrant GraphQL ecosystem. 8base comes with a robust API Explorer that allows developers to rapidly sample data using GraphQL. It is our belief that GraphQL is far superior than traditional REST or SOAP APIs. 8base is one of the few platforms of its kind that employs GraphQL.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;10. Ongoing Management of the Production Environment&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;What if the system just ran and scaled as needs grew, without babysitting?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Most businesses staff teams to manage their storage and computing infrastructure. This is true whether the infrastructure is on premise or in the cloud. 8base runs and scales to meet application demands without requiring business to staff for these roles.&lt;/p&gt;

&lt;p&gt;8base was designed by developers, for developers. 8base was built to drastically transform the ability for businesses to build and host modern web applications, especially those that power large business needs.&lt;/p&gt;

&lt;p&gt;We look forward to closely following the needs of our customers and rapidly responding to their requests.&lt;/p&gt;

&lt;p&gt;So..please get started by creating your first data model or installing one of our sample apps!&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Connect With Us!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;To get started with 8base or simply learn more information, visit &lt;a href="http://www.8base.com"&gt;www.8base.com&lt;/a&gt;, docs.8base.com, follow us on Twitter at @8baseinc, or email us directly at &lt;a href="mailto:info@8base.com"&gt;info@8base.com&lt;/a&gt;.&lt;/p&gt;


</description>
      <category>serverless</category>
      <category>graphql</category>
      <category>cli</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>Front-End Developer Skills Alone Can Take You All the Way — Introducing 8base</title>
      <dc:creator>Andrei Anisimov</dc:creator>
      <pubDate>Wed, 16 Jan 2019 23:22:55 +0000</pubDate>
      <link>https://dev.to/8base/front-end-developer-skills-alone-can-take-you-all-the-wayintroducing-8base-420o</link>
      <guid>https://dev.to/8base/front-end-developer-skills-alone-can-take-you-all-the-wayintroducing-8base-420o</guid>
      <description>

&lt;p&gt;&lt;a href=""&gt; &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XUKMpf1s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ksrxgrjh36wu7xqk8e1p.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to the U.S. Bureau of Labor Statistics, software developer jobs are expected to grow 17% from 2014 till 2024. They categorize this growth as “much faster” than the average rate among other professions.&lt;/p&gt;

&lt;p&gt;Software is most definitely eating the world, as famously quoted by Marc Andreesen in 2012. Think about all the things you do differently today compared to how you did them 10 years ago — hail a taxi, set your alarm clock, pay for coffee, order food, reserve lodging, watch movies — the list is endless.&lt;/p&gt;

&lt;p&gt;In response to this, businesses are rushing to build the digital capabilities needed to make them competitive over the next few decades. Software developers are what makes all of this possible, yet, there remains a massive shortage of qualified developers in the world. 8base was built to tackle this challenge.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Reducing Team Size Makes Things Easier&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We built 8base to deliver on the promise of building software rapidly and doing so with a smaller team. 8base’ development tools help get the job done with less people, and thus less people-management overhead. This translates to less time, less expenditure and better results. 8base also makes the ongoing hosting of the application a complete afterthought.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Working Smarter Makes Everyone Happy&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Developers spend the majority of their time on low value-added activities such as infrastructure provisioning and attending meetings to coordinate hand-offs between back- and front-end developers. 8base eliminates these tasks and allows developers to focus on true innovation. This is why we call 8base a Developer Acceleration Platform — because our mission is to make developers orders of magnitude more productive.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Why Front-End Developers?&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We live in an age where user interface is king. Businesses can no longer represent themselves as clunky and outdated. Front-end developers are the tip of the spear in making user interfaces come to life. On the flip side, what happens behind the user interface has become far more commoditized and less of a concern for businesses as long as that infrastructure is secure, scalable and inexpensive. These factors drove us to build solutions empowering front-end devs to work more productively on behalf of businesses desperate to achieve digital transformation.&lt;/p&gt;

&lt;p&gt;In constructing such a product, our team was confronted with many design decisions. To this end, we meticulously crafted with elements such as Serverless, GraphQL, Command Line Interface (CLI) and more to empower developers in the best possible way. Click here to gain a better understanding of how 8base enables a front-end developer to build like a full stack developer and operate like a seasoned DevOps pro.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Connect With Us!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;To get started with 8base or simply learn more information, visit &lt;a href="http://www.8base.com"&gt;www.8base.com&lt;/a&gt;, docs.8base.com, follow us on Twitter at @8baseinc, or email us directly at &lt;a href="mailto:info@8base.com"&gt;info@8base.com&lt;/a&gt;.&lt;/p&gt;


</description>
      <category>graphql</category>
      <category>serverless</category>
      <category>javascript</category>
      <category>frontenddevelopers</category>
    </item>
  </channel>
</rss>
