SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Un-Framework
Delivering Dynamic Experiences with HTML over the Wire
Andreas Nedbal / T3DD23
About Me
Andreas Nedbal
Senior Frontend Developer @ in2code
TYPO3 Core Merger: Backend UX
TYPO3camp Munich Organizer
<template>
<ul id="entries">
<li v-for="item in items">
{{ item }}
</li>
</ul>
<button @click="fetchNextPage">Next Page</button>
</template>
<script>
const items = ref([])
function fetchNextPage() {
fetch('/endpoint').then((res) => {
items.value = items.value.concat(res.body)
})
}
</script>
function fetchNextPage() {
fetch('/endpoint').then(res => {
$('#entries').append(res.html);
})
}
<a href="/endpoint?page=2">Next Page</a>
Frontend is hard
Node
Toolchains
Which npm packages do I need?
All those frameworks
Vite
Webpack
Rollup
React Vue
Svelte
Which are safe?
Which Node version do I need?
Switching versions for projects
Turbo Drive
Previously known as “Turbolinks” in the Rails world.
Turns a page into an “SPA” by replacing all regular page loads with AJAX.
Previous pages are cached, so perceived performance is way faster.
Turbo Frames
Turbo Frames allow pages to be decomposed into smaller components that
capture form actions and navigation.
Navigating inside a <turbo-frame id=”idName”> will check the target
response for a matching <turbo-frame> tag and only replace it’s contents with
the current tag present.
Turbo Streams
Actually meant for streaming over websockets, you can also use this as
responses from any web request.
Turbo will listen to responses using the text/vnd.turbo-stream.html
content-type and execute actions based on <turbo-stream> tags present.
Demonstration
Problems with the Turbo approach
Porting an existing site using a lot of JS already is not recommended.
Pages using Turbo don’t fire the load event anymore (or well, only once) since
page navigation is happening over AJAX.
This requires massive refactoring/rethinking of an application.
Controllers
Classes that contain functionality for sites using actions, targets and values in
HTML.
Controllers don’t require event listeners to be initialized, this happens
automatically as soon as a matching data-controller attribute is found on the
page or even asynchronously loaded.
<div data-controller="hello">
<input data-hello-target="name" type="text">
<button data-action="click->hello#greet">
Greet
</button>
<span data-hello-target="output">
</span>
</div>
import { Controller } from "stimulus"
export default class extends Controller {
static targets = [ "name", "output" ]
greet() {
this.outputTarget.textContent =
`Hello, ${this.nameTarget.value}!`
}
}
Actions
Allow to call controller methods from HTML using data-action attributes.
Example:
<button data-action=”click->example#action”>
Would call the action() method on ExampleController on a button click.
The default interaction of an element can also be omitted, so the above can be
shortened to:
<button data-action=”example#action”>
<div data-controller="hello">
<input data-hello-target="name" type="text">
<button data-action="click->hello#greet">
Greet
</button>
<span data-hello-target="output">
</span>
</div>
import { Controller } from "stimulus"
export default class extends Controller {
static targets = [ "name", "output" ]
greet() {
this.outputTarget.textContent =
`Hello, ${this.nameTarget.value}!`
}
}
Targets
Allow to define targets via HTML that can be accessed inside controllers as an
alternative to selecting them via queries.
The names of targets need to be defined in a static array in the controller.
Example:
<div data-controller=”test” data-test-target=”root”>
The element would be accessible as this.rootTarget in the controller class.
<div data-controller="hello">
<input data-hello-target="name" type="text">
<button data-action="click->hello#greet">
Greet
</button>
<span data-hello-target="output">
</span>
</div>
import { Controller } from "stimulus"
export default class extends Controller {
static targets = [ "name", "output" ]
greet() {
this.outputTarget.textContent =
`Hello, ${this.nameTarget.value}!`
}
}
Values
Allow to specify values in HTML that can be used inside controllers using the
specified value name.
The names of values need to be defined in a static array in the controller.
Example:
<div data-controller=”test” data-test-example-value=”Hello World”>
this.exampleValue would resolve to “Hello World” in TestController.
Demonstration
Who is using Hotwire?
Integrations
Rails
Turbo Rails
bundle install turbo-rails
Laravel
Turbo Laravel
composer require hotwired/turbo-laravel
Symfony
Symfony UX Turbo
composer require symfony/ux-turbo
TYPO3
TYPO3 Extension “Topwire”
Find out more about it right at the next talk in Room IONOS
Past, Present and Future of creating server side rendered interactive websites
with TYPO3
by Helmut Hummel
Questions?
Thanks for listening!
Hope you enjoyed this talk :)
Feedback? Want to chat?
Fediverse (Mastodon/
):
@pixel@desu.social
Twitter:
@pixeldesu
TYPO3 Slack:
@pixeldesu

Weitere Àhnliche Inhalte

Was ist angesagt?

GeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxGeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxDatabricks
 
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswift
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswiftlazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswift
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswiftTomohiro Kumagai
 
Kotlin coroutines 톺어보ᄀᅔ
Kotlin coroutines 톺어보ᄀᅔKotlin coroutines 톺어보ᄀᅔ
Kotlin coroutines 톺어보ᄀᅔTaewoo Kim
 
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015CODE BLUE
 
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘった
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘったnioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘった
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘったchibochibo
 
Introduction to Dynamic Malware Analysis ...Or am I "Cuckoo for Malware?"
Introduction to Dynamic Malware Analysis   ...Or am I "Cuckoo for Malware?"Introduction to Dynamic Malware Analysis   ...Or am I "Cuckoo for Malware?"
Introduction to Dynamic Malware Analysis ...Or am I "Cuckoo for Malware?"Lane Huff
 
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹Atsushi Tadokoro
 
Windows環汃でぼgităŸăšă‚(2016.8)
Windows環汃でぼgităŸăšă‚(2016.8)Windows環汃でぼgităŸăšă‚(2016.8)
Windows環汃でぼgităŸăšă‚(2016.8)Tadahiro Ishisaka
 
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolang
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolangFINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolang
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolangYoshiki Shibukawa
 
Jenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And GroovyJenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And GroovyDaniel Spilker
 
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒ
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒă€Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒ
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒYu Tanaka
 
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄ
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄAndroidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄ
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄTakashi Kanamaru
 
go generate ćźŒć…šć…„é–€
go generate ćźŒć…šć…„é–€go generate ćźŒć…šć…„é–€
go generate ćźŒć…šć…„é–€yaegashi
 
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’ă•ăă‚‰ăźVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’ozuma5119
 
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄ
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄJobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄ
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄOSSăƒ©ăƒœæ ȘćŒäŒšç€Ÿ
 
Basic Dynamic Analysis of Malware
Basic Dynamic Analysis of MalwareBasic Dynamic Analysis of Malware
Basic Dynamic Analysis of MalwareNatraj G
 
Web Hacking (basic)
Web Hacking (basic)Web Hacking (basic)
Web Hacking (basic)Ammar WK
 

Was ist angesagt? (20)

GeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxGeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony Fox
 
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswift
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswiftlazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswift
lazy var たç‰čćŸŽă‚’çŸ„ă‚‹ #cocoa_kansai #cswift
 
Kotlin coroutines 톺어보ᄀᅔ
Kotlin coroutines 톺어보ᄀᅔKotlin coroutines 톺어보ᄀᅔ
Kotlin coroutines 톺어보ᄀᅔ
 
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
 
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘった
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘったnioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘった
nioă§äœœăŁăŸBufferedWriteră«ć€‰ăˆăŸă‚‰äŸ‹ć€–ă«ăȘった
 
Android Task Hijacking
Android Task HijackingAndroid Task Hijacking
Android Task Hijacking
 
Introduction to Dynamic Malware Analysis ...Or am I "Cuckoo for Malware?"
Introduction to Dynamic Malware Analysis   ...Or am I "Cuckoo for Malware?"Introduction to Dynamic Malware Analysis   ...Or am I "Cuckoo for Malware?"
Introduction to Dynamic Malware Analysis ...Or am I "Cuckoo for Malware?"
 
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹
ăƒ‡ă‚žă‚żăƒ«ă‚ąăƒŒăƒˆă‚»ăƒŸăƒŠăƒŒ#2 openFrameworksで歊ぶ、 クăƒȘă‚šă‚€ăƒ†ă‚Łăƒ–ăƒ»ă‚łăƒŒăƒ‡ă‚Łăƒłă‚° Session 2: æ§‹é€ ă‚’ă€ăă‚‹
 
Windows環汃でぼgităŸăšă‚(2016.8)
Windows環汃でぼgităŸăšă‚(2016.8)Windows環汃でぼgităŸăšă‚(2016.8)
Windows環汃でぼgităŸăšă‚(2016.8)
 
Flutter
FlutterFlutter
Flutter
 
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolang
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolangFINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolang
FINAL FANTASY Record Keeperă‚’æ”ŻăˆăŸGolang
 
Http4s
Http4s Http4s
Http4s
 
Jenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And GroovyJenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And Groovy
 
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒ
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒă€Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒ
【Swift】 それ、enumずstructă§ă‚„ăŁăŠăżăŸă—ă‚‡ă†ïŒïŒ
 
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄ
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄAndroidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄ
Androidă‚’ćˆ©ç”šă—ăŸć€–éƒšæ©Ÿć™šăźćˆ¶ćŸĄ
 
go generate ćźŒć…šć…„é–€
go generate ćźŒć…šć…„é–€go generate ćźŒć…šć…„é–€
go generate ćźŒć…šć…„é–€
 
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’ă•ăă‚‰ăźVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’
さくらぼVPSă«æ„ă‚‹æ‚Șいäșșă‚’èŠłćŻŸă™ă‚‹ ăăźïŒ’
 
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄ
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄJobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄ
JobScheduleră§ăźă‚žăƒ§ăƒ–ăźć€šé‡ćźŸèĄŒăƒ»æŽ’ä»–ćˆ¶ćŸĄ
 
Basic Dynamic Analysis of Malware
Basic Dynamic Analysis of MalwareBasic Dynamic Analysis of Malware
Basic Dynamic Analysis of Malware
 
Web Hacking (basic)
Web Hacking (basic)Web Hacking (basic)
Web Hacking (basic)
 

Ähnlich wie Un-Framework - Delivering Dynamic Experiences with HTML over the Wire

HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and ImprovedTimothy Fisher
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJSEdi Santoso
 
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)Ontico
 
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]Eleanor McHugh
 
Server side rendering with React and Symfony
Server side rendering with React and SymfonyServer side rendering with React and Symfony
Server side rendering with React and SymfonyIgnacio MartĂ­n
 
Web components with Angular
Web components with AngularWeb components with Angular
Web components with AngularAna Cidre
 
PrimeNG - Components para la Vida Real
PrimeNG - Components para la Vida RealPrimeNG - Components para la Vida Real
PrimeNG - Components para la Vida Realcagataycivici
 
Hidden Docs in Angular
Hidden Docs in AngularHidden Docs in Angular
Hidden Docs in AngularYadong Xie
 
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"GeeksLab Odessa
 
Technical Preview: The New Shopware Admin
Technical Preview: The New Shopware AdminTechnical Preview: The New Shopware Admin
Technical Preview: The New Shopware AdminPhilipp Schuch
 
Devoxx 2014-webComponents
Devoxx 2014-webComponentsDevoxx 2014-webComponents
Devoxx 2014-webComponentsCyril Balit
 
Polymer - pleasant client-side programming with web components
Polymer - pleasant client-side programming with web componentsPolymer - pleasant client-side programming with web components
Polymer - pleasant client-side programming with web componentspsstoev
 
Building a js widget
Building a js widgetBuilding a js widget
Building a js widgetTudor Barbu
 
Introduction to React and MobX
Introduction to React and MobXIntroduction to React and MobX
Introduction to React and MobXAnjali Chawla
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
Mobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMohammad Shaker
 

Ähnlich wie Un-Framework - Delivering Dynamic Experiences with HTML over the Wire (20)

HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJS
 
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)
ĐŸĐ°Ń€Đ°Đ·ĐžŃ‚ĐžŃ€ŃƒĐ”ĐŒ ĐœĐ° React-эĐșĐŸŃĐžŃŃ‚Đ”ĐŒĐ” (Angular 4+) / АлДĐșсДĐč ĐžŃ…Ń€ĐžĐŒĐ”ĐœĐșĐŸ (IPONWEB)
 
Client Web
Client WebClient Web
Client Web
 
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
 
Server side rendering with React and Symfony
Server side rendering with React and SymfonyServer side rendering with React and Symfony
Server side rendering with React and Symfony
 
Web components with Angular
Web components with AngularWeb components with Angular
Web components with Angular
 
practical9.pptx
practical9.pptxpractical9.pptx
practical9.pptx
 
PrimeNG - Components para la Vida Real
PrimeNG - Components para la Vida RealPrimeNG - Components para la Vida Real
PrimeNG - Components para la Vida Real
 
Web 5 | JavaScript Events
Web 5 | JavaScript EventsWeb 5 | JavaScript Events
Web 5 | JavaScript Events
 
Hidden Docs in Angular
Hidden Docs in AngularHidden Docs in Angular
Hidden Docs in Angular
 
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"
JSLab. АлДĐșсДĐč Đ’ĐŸĐ»ĐșĐŸĐČ. "React ĐœĐ° праĐșтоĐșĐ”"
 
Technical Preview: The New Shopware Admin
Technical Preview: The New Shopware AdminTechnical Preview: The New Shopware Admin
Technical Preview: The New Shopware Admin
 
Devoxx 2014-webComponents
Devoxx 2014-webComponentsDevoxx 2014-webComponents
Devoxx 2014-webComponents
 
Polymer - pleasant client-side programming with web components
Polymer - pleasant client-side programming with web componentsPolymer - pleasant client-side programming with web components
Polymer - pleasant client-side programming with web components
 
Building a js widget
Building a js widgetBuilding a js widget
Building a js widget
 
Capstone ms2
Capstone ms2Capstone ms2
Capstone ms2
 
Introduction to React and MobX
Introduction to React and MobXIntroduction to React and MobX
Introduction to React and MobX
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Mobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhone
 

KĂŒrzlich hochgeladen

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂anilsa9823
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfWilly Marroquin (WillyDevNET)
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 

KĂŒrzlich hochgeladen (20)

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➄8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Vip Call Girls Noida âžĄïž Delhi âžĄïž 9999965857 No Advance 24HRS Live
Vip Call Girls Noida âžĄïž Delhi âžĄïž 9999965857 No Advance 24HRS LiveVip Call Girls Noida âžĄïž Delhi âžĄïž 9999965857 No Advance 24HRS Live
Vip Call Girls Noida âžĄïž Delhi âžĄïž 9999965857 No Advance 24HRS Live
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂
CALL ON ➄8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 

Un-Framework - Delivering Dynamic Experiences with HTML over the Wire

  • 1. Un-Framework Delivering Dynamic Experiences with HTML over the Wire Andreas Nedbal / T3DD23
  • 2. About Me Andreas Nedbal Senior Frontend Developer @ in2code TYPO3 Core Merger: Backend UX TYPO3camp Munich Organizer
  • 3. <template> <ul id="entries"> <li v-for="item in items"> {{ item }} </li> </ul> <button @click="fetchNextPage">Next Page</button> </template> <script> const items = ref([]) function fetchNextPage() { fetch('/endpoint').then((res) => { items.value = items.value.concat(res.body) }) } </script>
  • 4. function fetchNextPage() { fetch('/endpoint').then(res => { $('#entries').append(res.html); }) }
  • 6. Frontend is hard Node Toolchains Which npm packages do I need? All those frameworks Vite Webpack Rollup React Vue Svelte Which are safe? Which Node version do I need? Switching versions for projects
  • 7.
  • 8.
  • 9.
  • 10. Turbo Drive Previously known as “Turbolinks” in the Rails world. Turns a page into an “SPA” by replacing all regular page loads with AJAX. Previous pages are cached, so perceived performance is way faster.
  • 11. Turbo Frames Turbo Frames allow pages to be decomposed into smaller components that capture form actions and navigation. Navigating inside a <turbo-frame id=”idName”> will check the target response for a matching <turbo-frame> tag and only replace it’s contents with the current tag present.
  • 12. Turbo Streams Actually meant for streaming over websockets, you can also use this as responses from any web request. Turbo will listen to responses using the text/vnd.turbo-stream.html content-type and execute actions based on <turbo-stream> tags present.
  • 14. Problems with the Turbo approach Porting an existing site using a lot of JS already is not recommended. Pages using Turbo don’t fire the load event anymore (or well, only once) since page navigation is happening over AJAX. This requires massive refactoring/rethinking of an application.
  • 15.
  • 16. Controllers Classes that contain functionality for sites using actions, targets and values in HTML. Controllers don’t require event listeners to be initialized, this happens automatically as soon as a matching data-controller attribute is found on the page or even asynchronously loaded.
  • 17. <div data-controller="hello"> <input data-hello-target="name" type="text"> <button data-action="click->hello#greet"> Greet </button> <span data-hello-target="output"> </span> </div>
  • 18. import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name", "output" ] greet() { this.outputTarget.textContent = `Hello, ${this.nameTarget.value}!` } }
  • 19. Actions Allow to call controller methods from HTML using data-action attributes. Example: <button data-action=”click->example#action”> Would call the action() method on ExampleController on a button click. The default interaction of an element can also be omitted, so the above can be shortened to: <button data-action=”example#action”>
  • 20. <div data-controller="hello"> <input data-hello-target="name" type="text"> <button data-action="click->hello#greet"> Greet </button> <span data-hello-target="output"> </span> </div>
  • 21. import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name", "output" ] greet() { this.outputTarget.textContent = `Hello, ${this.nameTarget.value}!` } }
  • 22. Targets Allow to define targets via HTML that can be accessed inside controllers as an alternative to selecting them via queries. The names of targets need to be defined in a static array in the controller. Example: <div data-controller=”test” data-test-target=”root”> The element would be accessible as this.rootTarget in the controller class.
  • 23. <div data-controller="hello"> <input data-hello-target="name" type="text"> <button data-action="click->hello#greet"> Greet </button> <span data-hello-target="output"> </span> </div>
  • 24. import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name", "output" ] greet() { this.outputTarget.textContent = `Hello, ${this.nameTarget.value}!` } }
  • 25. Values Allow to specify values in HTML that can be used inside controllers using the specified value name. The names of values need to be defined in a static array in the controller. Example: <div data-controller=”test” data-test-example-value=”Hello World”> this.exampleValue would resolve to “Hello World” in TestController.
  • 27. Who is using Hotwire?
  • 30. Laravel Turbo Laravel composer require hotwired/turbo-laravel
  • 31. Symfony Symfony UX Turbo composer require symfony/ux-turbo
  • 32. TYPO3 TYPO3 Extension “Topwire” Find out more about it right at the next talk in Room IONOS Past, Present and Future of creating server side rendered interactive websites with TYPO3 by Helmut Hummel
  • 34. Thanks for listening! Hope you enjoyed this talk :) Feedback? Want to chat? Fediverse (Mastodon/
): @pixel@desu.social Twitter: @pixeldesu TYPO3 Slack: @pixeldesu