Stimulus En JavaScript-ram för människor som älskar HTML

Stimulus är ett "blygsamt JavaScript-ramverk", byggt av folk på Basecamp som tog dig med Rails.

Det är på många sätt motsatsen till andra moderna ramar som finns tillgängliga idag. Medan du kanske ser några liknande begrepp och namngivning, är Stimulus väldigt annorlunda på några grundläggande sätt. Vi diskuterar dessa skillnader kort och bygger sedan vår första applikation med Stimulus.

DOM: En plats för stat?

Kärnbegreppen i många moderna ramar ligger i att skilja "tillstånd" från "DOM". På så sätt fungerar DOM endast som en klient för de uppgifter som den representerar.

Stimulus vänder detta koncept på huvudet och förlitar sig istället på DOM för att hålla tillståndet.

Vad detta i sista hand betyder är att Stimulus passar bäst för applikationer som tjänar HTML (istället för att integrera med ett JSON API).

Med Stimulus ser du inte HTML-mallar. Istället kommer du att se data-* attribut som ansluter HTML till JavaScript-programmet.

Detta betyder också att du inte kommer att se saker som varje eller Karta slingor som du kan se i Handlebars eller React.

Stimulus håller inte jobbet för att göra HTML om du inte uttryckligen skapar den funktionen.

Så ... Vad gör det?

Så Stimulus gör inte mallar. Snarere är det byggt för att koppla till handlingar och händelser som du tar på den främre änden av en applikation till styrenheter på baksidan.

Stimulus använder tre begrepp för att uppnå detta: mål, kontrollerare, och åtgärder.

Men innan vi går för långt in, låt oss gå och få Stimulus igång på din dator!

Inrätta

Den här inställningen förutsätter att du redan har installerat en ny version av NodeJS på din dator. Gå vidare till nodejs.org om du inte redan har gjort det här.

Vi använder en grundläggande statisk index.html fil som först kommer att se ut så här:

         

Notera: Vi kommer inte att täcka några styling eller byggprocesser för CSS i denna handledning.

Skapa sedan en mapp som heter src. Insidan av src, skapa en annan mapp som heter controllers och en singel index.js fil.

Vi använder Webpack för att skapa vår JavaScript-applikation, eftersom Stimulus använder vissa avancerade funktioner i JavaScript som inte fungerar direkt i webbläsare.

Skapa en fil i roten till ditt projekt som heter package.json som har följande innehåll:

"namn": "wdstimulus", "version": "1.0.0", "beskrivning": "Stimulus Introduktion", "Skript": , "Författare": "Ditt Namn", "Licens": "ISC "," devDependencies ": " @ babel / core ":" ^ 7.0.0-beta.39 "," @ babel / preset-env ":" ^ 7.0.0-beta.39 "," babel-loader " : "^ 8.0.0-beta.0", "babel-preset-stage-0": "^ 6.24.1", "stimulus": "^ 1.0.0", "webpack": "^ 3.10.0" 

Notera: Dessa versioner kommer att förändras i framtiden, och vi rekommenderar att du håller dig uppdaterad med den senaste versionen av något verktyg så mycket som är praktiskt.

Du kan även generera den här filen med npm init och installera beroenden en efter en med npm installera [paketnamn].

Den här filen innehåller allt vi behöver för att skapa en webbläsarkompatibel byggnad av vår Stimulus-applikation. Rulla från applikationsroten npm installera. Detta installerar dessa beroenden i node_modules katalog i din ansökan.

Därefter skapar vi en konfigurationsfil så Webpack vet vad vi vill att det ska göra med våra filer när vi sparar dem. I samma rotkatalog där package.json ligger, skapade en fil som heter webpack.config.js, och lägg till följande innehåll:

module.exports = modul: rules: [test: /\.js$/, exkludera: / (node_modules) /, använd: loader: 'babel-loader', alternativ: presets: ["@ babel / env "], plugins: [" transform-class-properties "]];

Den här filen berättar väsentligen Webpack för att kompilera vår JavaScript med env-förinställningen. Vi har 0-förinställningen tillgänglig i våra nodmoduler, och vi har också lagt till det nödvändiga plugin-modulen för omvandlingsklassegenskaper.

Det sista steget att vara redo för en Stimulus-ansökan är att fylla i vår index.js fil med följande innehåll:

importera Application från "stimulus" import definitionsFromContext från "stimulus / webpack-helpers" const application = Application.start () const context = require.context ("./ controllers", true, /\.js$/) application.load (definitionsFromContext (kontext))

Denna kod kommer direkt från Stimulus-dokumenten. Det utför lite magi för att tillåta oss att använda en konventionell namngivningsstruktur när vi skapar vår applikationskod.

Namnet på dina filer är faktiskt viktigt för Stimulus om du använder det här index.js kod (denna nyans är något Rails utvecklare kommer att hitta bekanta).

Nu när vi är redo, låt oss se till att vår Webpack-byggnad fungerar. Kör följande kommando i rotkatalogen:

npx webpack src / index.js dist / bundle.js - watch

De NPX En del av det här kommandot är ett bekvämt sätt att köra binärer som finns i node_modules katalogen. Detta kommando kommer att se ändringarna i dina JavaScript-filer och bygga om din ansökan när du gör de här ändringarna.

Så länge du inte ser fel i konsolen är du bra att gå!

controllers

Om du är bekant med Rails eller Laravel, kan konceptet kontroller vara enkelt att anta för dig.

Tänk på en kontroller när det gäller Stimulus som en JavaScript-klass som innehåller några metoder och data som fungerar tillsammans.

En kontroller kan se ut så här i Stimulus:

// src / controllers / refreshable_controller.js import Controller från "stimulus" export standardklass förlänger Controller 

Det finns några viktiga punkter att notera om denna kontroller. Först är styrenheten både HTML och JavaScript. De datastyrenhet attributet är det som säger att JavaScript ska skapa en ny instans av klassen.

En annan intressant egenskap att märka är att klassnamnet inte finns någonstans i kontrollerklassen själv. Detta händer på grund av linjen application.load (definitionsFromContext (kontext)) i index.js fil. Denna rad laddar programkoden och använder filnamnen till antyda klassnamn. Det kan vara förvirrande först, men när du börjar använda konventionen regelbundet blir den mycket mer flytande.

Åtgärder

En verkan är vad det låter som: ett förfarande som du vill göra efter en viss händelse från en användare. För vår uppdateringsregulator vill vi utföra en uppdatering av ett visst innehållsområde när en knapp klickas. I det här fallet kan vår åtgärd kallas refresh.

// src / controllers / refreshable_controller.js import Controller från "stimulus" export standardklass förlänger Controller refresh () console.log ("refresh!")

Men bara med denna åtgärdsmetod som finns tillgänglig i vår kontroller gör ingenting. Vi måste ansluta den till vår HTML.

När användaren klickar på knappen i den här HTML-filen körs uppdateringsåtgärden i kontrollenheten.

Nu, hur kan vi använda den här åtgärden för att göra något på sidan?

mål

Stimulus använder också ett koncept som heter "Mål" för att ansluta till viktiga delar på sidan. Vi använder det här för att hantera ett behållarelement som innehåller innehållet vi vill uppdatera.

// src / controllers / refreshable_controller.js import Controller från "stimulus" export standard klass förlänger Controller static targets = ["content"] refresh () this.contentTarget.innerHTML = "Uppdatera!" 

I det här exemplet har vi alla tre begreppen Stimulus representerade. en uppdateringsbar controller, a refresh åtgärd och a innehåll mål.

Om du tittar noga ser du något i den här koden som kan få dig att vakna: direkt manipulation av DOM. Detta är ett sätt att Stimulus skiljer sig från andra ramar. Direkt manipulation av DOM-element är inte bara möjligt, det uppmuntras.

Detta innebär också att om du är välkänd i jQuery eller Vanilla JavaScript och API-läsare, kan du dra nytta av den kunskapen! En jQuery-driven version av uppdateringsmetoden kan till exempel se ut så här:

// src / controllers / refreshable_controller.js import Controller från "stimulus" import $ från "jquery"; // kräver att du lägger till jQuery till package.json export standardklass utökar Controller static targets = ["content"] refresh () let target = this.contentTarget; $ .get ("/ content", funktion (innehåll) $ (mål) .html (innehåll))

Stimulus kommer inte i vägen om du vill använda andra verktyg du redan är bekant med.

Det är allt för den här kraschkursen!

Du har nu tillräckligt med information för att komma igång med att bygga mer underhållbara applikationer med Stimulus! Utvecklarna som skapade Stimulus påminner oss om att regler och trender kan brytas och ibland kan vi bryta sig bort från "bästa metoderna" och bara göra något som fungerar för oss.

Njut av att dyka i Stimulus!

Vidare läsning

  • stimulusjs.org
  • Stimulusens ursprung
  • Stimulus Diskurs

Lär dig JavaScript: Den fullständiga guiden

Vi har byggt en komplett guide för att hjälpa dig att lära dig JavaScript, oavsett om du precis börjat som webbutvecklare eller vill utforska mer avancerade ämnen.