SlideShare a Scribd company logo
1 of 40
Download to read offline
React + Flux
Eueung Mulyana
http://eueung.github.io/js/react
JS CodeLabs | Attribution-ShareAlike CC BY-SA

1 / 40
Agenda
React Basics #1
React Basics #2
Flux
2 / 40
 React Basics #1
A JavaScript library for building UIs | React
3 / 40
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HelloReact!</title>
<scriptsrc="react-0.14.5/react.js"></script>
<scriptsrc="react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"
</head>
<body>
<divid="example"></div>
<scripttype="text/babel">
ReactDOM.render(
<h1>Hello,world!</h1>,
document.getElementById('example')
);
</script>
</body>
</html>
Render @Browser
hello-00-A.html
4 / 40
Render @Browser
hello-01-B.html
src/hello-01.js
ReactDOM.render(
document.getElementById('example')
);
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HelloReact!</title>
<scriptsrc="react-0.14.5/react.js"></script>
<scriptsrc="react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-
</head>
<body>
<divid="example"></div>
<scripttype="text/babel"src="src/hello-01.js"></script
</body>
</html>
<h1>Hello,world!</h1>,
5 / 40
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HelloReact!</title>
<scriptsrc="react-0.14.5/react.js"></script>
<scriptsrc="react-0.14.5/react-dom.js"></script>
</head>
<body>
<divid="example"></div>
<scriptsrc="build/hello-02.js"></script>
</body>
</html>
#src/hello-02.js(JSX)
ReactDOM.render(
document.getElementById('example')
);
#build/hello-02.js(compiled)
ReactDOM.render(React.createElement(
'h1',
null,
'Hello,world!'
),document.getElementById('example'));
<h1>Hello,world!</h1>,
Precompile
JSX to vanilla JS
npminstall-gbabel-cli
npminstall-gbabel-preset-react
npminstall-gbabel-preset-es2015
$>babel--presetsreacthello-02.js--out-dir=../build
hello-02.js->..buildhello-02.js
6 / 40
this.props
 
hello-03.js
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HelloReact!</title>
<scriptsrc="react-0.14.5/react.js"></script>
<scriptsrc="react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-
</head>
<body>
<divid="example"></div>
<scripttype="text/babel"src="src/hello-03.js"></script
</body>
</html>
varHelloMessage=React.createClass({
render:function(){
return
}
});
ReactDOM.render(
<div>Hello{this.props.name}</div>;
<HelloMessagename="John"/>,document.getElem
7 / 40
hello-04.js
varTimer=React.createClass({
getInitialState:function(){
return{secondsElapsed:0};
},
tick:function(){
this.setState({secondsElapsed:this.state.secondsElapsed+
},
componentDidMount:function(){
this.interval=setInterval(this.tick,1000);
},
componentWillUnmount:function(){
clearInterval(this.interval);
},
render:function(){
return(
);
}
});
ReactDOM.render(
<div>SecondsElapsed:{this.state.secondsElapsed}</div
<Timer/>,document.getElementById('example'));
this.state
 
8 / 40
TodoApp
varTodoList=React.createClass({
render:function(){
varcreateItem=function(item){
return
};
return
}
});
hello-05.js
<likey={item.id}>{item.text}</li>;
<ul>{this.props.items.map(createItem)}</ul>;
varTodoApp=React.createClass({
getInitialState:function(){
return{items:[],text:''};
},
onChange:function(e){
this.setState({text:e.target.value});
},
handleSubmit:function(e){
e.preventDefault();
varnextItems=this.state.items.concat([{text:this.state
varnextText='';
this.setState({items:nextItems,text:nextText});
},
render:function(){
return(
<h3>TODO</h3>
<TodoListitems={this.state.items}/>
<formonSubmit={this.handleSubmit}>
<inputonChange={this.onChange}value={this.state.te
<button>{'Add#'+(this.state.items.length+1)}
</form>
</div>
);
}
});
ReactDOM.render(
<div>
<TodoApp/>,document.getElementById('example'
9 / 40
TodoApp | hello-05.js
10 / 40
hello-06.html
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HelloReact!</title>
<scriptsrc="react-0.14.5/react.js"></script>
<scriptsrc="react-0.14.5/react-dom.js"></script>
<scriptsrc="https://facebook.github.io/react/js/marked.min.js"
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"
</head>
<body>
<divid="example"></div>
<scripttype="text/babel"src="src/hello-06.js"></script
</body>
</html>
MarkdownEditor
A Component Using External Plugins
 
11 / 40
hello-06.js
varMarkdownEditor=React.createClass({
getInitialState:function(){
return{value:'Typesome*markdown*here!'};
},
handleChange:function(){
this.setState({value:this.refs.textarea.value});
},
rawMarkup:function(){
return{__html:marked(this.state.value,{sanitize:true
},
render:function(){
return(
<h3>Input</h3>
<textarea
onChange={this.handleChange}
ref="textarea"
defaultValue={this.state.value}/>
<h3>Output</h3>
<div
className="content"
dangerouslySetInnerHTML={this.rawMarkup()}
/>
</div>
);
}
});
ReactDOM.render(
<divclassName="MarkdownEditor">
<MarkdownEditor/>,document.getElementById('e
12 / 40
 React Basics #2
Starter Kit Examples
13 / 40
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>BasicExample</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicExample</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.IfyoucheckedoutthesourcefromGitHubmakesuretorun
</div>
<h4>ExampleDetails</h4>
<p>ThisiswritteninvanillaJavaScript(withoutJSX)andtransformedinthebrowser.
<p>LearnmoreaboutReactat<ahref="https://facebook.github.io/react"
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<script>...</script>
</body>
</html>
Example #1
React with Vanilla JS
<script>
varExampleApplication=React.createClass({
render:function(){
varelapsed=Math.round(this.props.elapsed /100);
varseconds=elapsed/10+(elapsed%10?'':'.0'
varmessage=
'Reacthasbeensuccessfullyrunningfor'+seconds+
returnReact.DOM.p(null,message);
}
});
//CallReact.createFactoryinsteadofdirectlycallExample
varExampleApplicationFactory=React.createFactory(ExampleA
varstart=newDate().getTime();
setInterval(function(){
ReactDOM.render(
ExampleApplicationFactory({elapsed:newDate().getTime()
document.getElementById('container')
);
},50);
</script>
14 / 40
Example #2
React with JSX
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>BasicExamplewithJSX</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicExamplewithJSX</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.IfyoucheckedoutthesourcefromGitHubmakesuretorun
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXandtransformedinthebrowser.
<p>LearnmoreaboutReactat<ahref="https://facebook.github.io/react"
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
<scripttype="text/babel">...</script>
</body>
</html>
<scripttype="text/babel">
varExampleApplication=React.createClass({
render:function(){
varelapsed=Math.round(this.props.elapsed /100);
varseconds=elapsed/10+(elapsed%10?'':'.0'
varmessage=
'Reacthasbeensuccessfullyrunningfor'+seconds+
return
}
});
varstart=newDate().getTime();
setInterval(function(){
ReactDOM.render(
document.getElementById('container')
);
},50);
</script>
<p>{message}</p>;
<ExampleApplicationelapsed={newDate().getTime()-star
15 / 40
Example #1
 
Example #2
 
16 / 40
Example #3
Basic Click Counter (JSX)
 
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>BasicExamplewithClickCounter</title>
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-
</head>
<body>
<divid="message"align="center"></div>
<scripttype="text/babel">
varCounter=React.createClass({
getInitialState:function(){
return{clickCount:0};
},
handleClick:function(){
this.setState(function(state){
return{clickCount:state.clickCount+1};
});
},
render:function(){
return(<h2onClick={this.handleClick}>Clickme!Num
}
});
ReactDOM.render(<Counter/>,document.getElementById('m
</script>
</body></html>
17 / 40
<!DOCTYPEhtml>
<html>
<head>...</head>
<body>
...
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
<scripttype="text/babel"src="example.js"></script>
</body>
</html>
Example #4
External JSX
 
example.js
varExampleApplication=React.createClass({
render:function(){
varelapsed=Math.round(this.props.elapsed /100);
varseconds=elapsed/10+(elapsed%10?'':'.0');
varmessage='Reacthasbeensuccessfullyrunningfor'
return
}
});
varstart=newDate().getTime();
setInterval(function(){
ReactDOM.render(
},50);
<p>{message}</p>;
<ExampleApplicationelapsed={newDate().get
18 / 40
Example #5
Precompiled JSX (Vanilla JS @Browser)
 
$>babel--presetsreactexample.js--out-dir=build
example.js->buildexample.js
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>BasicExamplewithPrecompiledJSX</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicExamplewithPrecompiledJSX</h1>
<divid="container">
<p>Ifyoucanseethis,Reactisnotrunning.Tryrunni
<pre>...</pre>
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXinaseparatefileandprecomp
<pre>
npminstall-gbabel
cdexamples/basic-jsx-precompile/
babelexample.js--out-dir=build
</pre>
<p>LearnmoreaboutReactat<ahref="https://facebook.gi
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="build/example.js"></script>
</body>
</html>
19 / 40
Example #6
JSX and Harmony (ES6|ES2015)
<!DOCTYPEhtml>
<head>
<metacharset="utf-8">
<title>BasicExamplewithJSXandES6features</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicExamplewithJSXandES6features</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.IfyoucheckedoutthesourcefromGitHubmakesuretorun
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXwithHarmony(ES6)syntaxandtransformedinthebrowser.
<p>LearnmoreaboutReactat<ahref="https://facebook.github.io/react"
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
<scripttype="text/babel">...</script>
</body>
</html>
<html>
<scripttype="text/babel">
classExampleApplicationextendsReact.Component{
render(){
varelapsed=Math.round(this.props.elapsed /100);
varseconds=elapsed/10+(elapsed%10?'':'.0'
varmessage=`Reacthasbeensuccessfullyrunningfor
return
}
}
varstart=newDate().getTime();
setInterval(()=>{
ReactDOM.render(
},50);
</script>
<p>{message}</p>;
<ExampleApplicationelapsed={newDate()
20 / 40
Example #7
CommonJS & Browserify (Bundled Vanilla JS @ Browser)
package.json
{
"name":"react-basic-commonjs-example",
"description":"BasicexampleofusingReactwithCommonJS"
"main":"index.js",
"dependencies":{
"babelify":"^6.3.0",
"react":"^0.14.0-rc1",
"react-dom":"^0.14.0-rc1",
"watchify":"^3.4.0"
},
"scripts":{
"start":"watchifyindex.js-v-tbabelify-obundle.js"
}
} npminstall
npmstart
21 / 40
index.js
'usestrict';
varReact=require('react');
varReactDOM=require('react-dom');
varExampleApplication=React.createClass({
render:function(){
varelapsed=Math.round(this.props.elapsed /100);
varseconds=elapsed/10+(elapsed%10?'':'.0');
varmessage=
'Reacthasbeensuccessfullyrunningfor'+seconds+
return
}
});
varstart=newDate().getTime();
setInterval(function(){
ReactDOM.render(
document.getElementById('container')
);
},50);
<p>{message}</p>;
<ExampleApplicationelapsed={newDate().getTime()-start
index.html
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>BasicCommonJSExamplewithBrowserify</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicCommonJSExamplewithBrowserify</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.Ify
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXinaCommonJSmoduleandpreco
<pre>npmstart</pre>
<p>LearnmoreaboutReactat<ahref="https://facebook.git
<scriptsrc="bundle.js"></script>
</body>
</html>
22 / 40
Example #8
 
index.html
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>QuadraticFormulaCalculator</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>QuadraticFormulaCalculator</h1>
<divid="container">
<p>Ifyoucanseethis,Reactisnotworkingright.This
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXinaseparatefileandtransfo
<p>LearnmoreaboutReactat<ahref="https://facebook.git
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-
<scripttype="text/babel"src="example.js"></script>
</body>
</html>
23 / 40
varQuadraticCalculator=React.createClass({
getInitialState:function(){return{a:1,b:3,c:-4};},
handleInputChange:function(key,event){
varpartialState={};
partialState[key]=parseFloat(event.target.value);
this.setState(partialState);
},
render:function(){
vara=this.state.a;varb=this.state.b;varc=this.state.c;
varroot=Math.sqrt(Math.pow(b,2)-4*a*c);
vardenominator=2*a;
varx1=(-b+root)/denominator;
varx2=(-b-root)/denominator;
return(
<strong><em>ax</em><sup>2</sup>+<em>bx</em>+<em>c</em>=0</strong>
<h4>Solvefor<em>x</em>:</h4>
<p>
<label>a:<inputtype="number"value={a}onChange={this.handleInputChange.bind(null,
<label>b:<inputtype="number"value={b}onChange={this.handleInputChange.bind(null,
<label>c:<inputtype="number"value={c}onChange={this.handleInputChange.bind(null,
x:<strong>{x1},{x2}</strong>
</p>
</div>
);
}
});
ReactDOM.render(
<div>
<QuadraticCalculator/>,document.getElementById('container'));
example.js
24 / 40
Example #9
WebComponents
25 / 40
<!DOCTYPEhtml>
<head>
<metahttp-equiv='Content-type'content='text/html;charset=utf-8'
<title>BasicExamplewithWebComponents</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
</head>
<body>
<h1>BasicExamplewithWebComponents</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.IfyoucheckedoutthesourcefromGitHubmakesuretorun
</div><br/><br/>
<h4>ExampleDetails</h4>
<p>ThisexampledemonstratesWebComponent/ReactComponentinteroperabilitybyrenderingaReactComponent,whichrendersaW
<p>LearnmoreaboutReactat<ahref="http://facebook.github.io/react"
<scriptsrc="../shared/thirdparty/webcomponents.js"></script
<scriptsrc="../../react-0.14.5/react.js"></script>
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
<scripttype="text/babel">... </script>
</body>
</html>
<html>
index.html
<scripttype="text/babel">
varproto=Object.create(HTMLElement.prototype,{
createdCallback:{
value:function(){
varmountPoint=document.createElement('span');
this.createShadowRoot().appendChild(mountPoint);
varname=this.getAttribute('name');
varurl='https://www.google.com/search?q='+encodeU
ReactDOM.render(
}
}
});
document.registerElement('x-search',{prototype:proto});
classHelloMessageextendsReact.Component{
render(){
return<div>Hello<x-searchname={this.props.name}/>!
}
}
//MountReactComponent(whichusesWebComponentwhichuses
varcontainer=document.getElementById('container');
ReactDOM.render(
</script>
<ahref={url}>{name}</a>,mountPoint);
<HelloMessagename="JimSproch"/>,containe
26 / 40
Example #10
 
<divid="container">
<spanclass="animateExample"data-reactid=".0">
<divclass="animateItem"style="left:0px;background:red;"
<divclass="animateItem"style="left:128px;background:gra
<divclass="animateItem"style="left:256px;background:blue;"
</span>
</div>
27 / 40
index.html
<!DOCTYPEhtml>
<head>
<metacharset="utf-8">
<title>ExamplewithTransitions</title>
<linkrel="stylesheet"href="../shared/css/base.css"/>
<linkrel="stylesheet"href="transition.css"/>
</head>
<body>
<h1>ExamplewithTransitions</h1>
<divid="container">
<p>ToinstallReact,followtheinstructionson<ahref
<p>Ifyoucanseethis,Reactisnotworkingright.IfyoucheckedoutthesourcefromGitHubmakesuretorun
</div>
<h4>ExampleDetails</h4>
<p>ThisiswrittenwithJSXandtransformedinthebrowser.
<p>LearnmoreaboutReactat<ahref="https://facebook.github.io/react"
<scriptsrc="../../react-0.14.5/react-with-addons.js"></
<scriptsrc="../../react-0.14.5/react-dom.js"></script>
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
<scripttype="text/babel">...</script>
</body>
</html>
<html>
<scripttype="text/babel">
varCSSTransitionGroup=React.addons.CSSTransitionGroup;
varINTERVAL=2000;
varAnimateDemo=React.createClass({
getInitialState:function(){return{current:0};},
componentDidMount:function(){this.interval=setInterva
componentWillUnmount:function(){clearInterval(this.inte
tick:function(){this.setState({current:this.state.curr
render:function(){
varchildren=[];
varpos=0;
varcolors=['red','gray','blue'];
for(vari=this.state.current;i<this.state.current
varstyle={left:pos*128,background:colors[i%
pos++;
children.push(
}
return(
{children}
</CSSTransitionGroup>
);
}
});
ReactDOM.render(
</script>
<divkey={i}className="animateItem"sty
<CSSTransitionGroupclassName="animateExample"transit
<AnimateDemo/>,document.getElementById('co
28 / 40
transition.css
.example-enter,
.example-leave{
-webkit-transition:all.25s;
transition:all.25s;
}
.example-enter,
.example-leave.example-leave-active{
opacity:0.01;
}
.example-leave.example-leave-active{
margin-left:-128px;
}
.example-enter{
margin-left:128px;
}
.example-enter.example-enter-active,
.example-leave{
margin-left:0;
opacity:1;
}
.animateExample{
display:block;
height:128px;
position:relative;
width:384px;
}
.animateItem{
color:white;
font-size:36px;
font-weight:bold;
height:128px;
line-height:128px;
position:absolute;
text-align:center;
-webkit-transition:all.25s;/*TODO:makethisamoveanim
transition:all.25s;/*TODO:makethisamoveanimation*/
width:128px;
}
29 / 40
 Flux
Easy Flux Example | @tonyspiro
30 / 40
Structure
app.js
stores/ListStore.js
dispatcher/AppDispatcher.js
components/
AppRoot.jsx
NewItemForm.jsx
31 / 40
32 / 40
{
...,
"dependencies":{
"babelify":"^7.2.0",
"babel-preset-react":"^6.3.13",
"babel-preset-es2015":"^6.3.13",
"browserify":"^12.0.1",
"events":"^1.1.0",
"flux":"^2.1.1",
"gulp":"^3.9.0",
"gulp-rename":"^1.2.1",
"gulp-uglify":"^1.5.1",
"lodash":"^3.10.1",
"react":"^0.14.5",
"react-dom":"^0.14.5",
"run-sequence":"^1.1.5",
"vinyl-source-stream":"^1.1.0"
},
"devDependencies":{},
...
}
npminstall-greactreact-dombabelifybrowserifyfluxlodashevents
npminstall-gbabel-preset-reactbabel-preset-es2015
npminstall-gvinyl-source-streamgulpgulp-uglifygulp-renamerun-sequence
package.json
33 / 40
vargulp=require('gulp');
varbrowserify=require('browserify');
varbabelify=require('babelify');
varsource=require('vinyl-source-stream');
varuglify=require('gulp-uglify');
varrename=require('gulp-rename');
varrunSequence=require('run-sequence');
gulp.task('build',function(){
returnbrowserify({
entries:'app.js',
extensions:['.jsx'],
debug:true
})
.transform(babelify,{presets:['es2015','react']})
.bundle()
.pipe(source('bundle.js'))
.pipe(gulp.dest('dist'));
});
gulp.task('compress',function(){
returngulp.src('./dist/bundle.js')
.pipe(uglify())
.pipe(rename({suffix:'.min'}))
.pipe(gulp.dest('dist'));
});
gulp.task('default',function(cb){
runSequence('build','compress',cb);
});
gulpfile.js
gulp.task('watch',function(){
gulp.watch("./*.js",['default']);
gulp.watch("./components/*.jsx",['default']);
gulp.watch("./dispatcher/*.js",['default']);
gulp.watch("./stores/*.js",['default']);
});
34 / 40
index.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>EasyFluxExample</title>
</head>
<body>
<h1>EasyFluxExample</h1>
<divid="app-root"></div>
<scriptsrc="dist/bundle.min.js"></script>
</body>
</html>
$>gulp
[09:25:53]Usinggulpfile./gulpfile.js
[09:25:53]Starting'default'...
[09:25:53]Starting'build'...
[09:25:59]Finished'build'after5.48s
[09:25:59]Starting'compress'...
[09:26:04]Finished'compress'after4.99s
[09:26:04]Finished'default'after10s
app.js
importReactfrom'react';
importReactDOMfrom'react-dom';
importAppRootfrom'./components/AppRoot';
ReactDOM.render(<AppRoot/>,document.getElementById('app-root
35 / 40
ListStore.js
import{EventEmitter}from'events';
import_from'lodash';
//-----------------------------------
letListStore=_.extend({},EventEmitter.prototype,{
items:[{name:'Item1',id:0},{name:'Item2',id:
getItems:function(){returnthis.items;},
addItem:function(new_item){this.items.push(new_item);},
removeItem:function(item_id){
letitems=this.items;
_.remove(items,(item)=>{returnitem_id==item.id;});
this.items=items;
},
emitChange:function(){this.emit('change');},
addChangeListener:function(callback){this.on('change',callback);},
removeChangeListener:function(callback){this.removeListener(
});
//-----------------------------------
exportdefaultListStore;
AppDispatcher.js
import{Dispatcher}from'flux';
importListStorefrom'../stores/ListStore';
//-----------------------------------
letAppDispatcher=newDispatcher();
//-----------------------------------
AppDispatcher.register((payload)=>{
letaction=payload.action;
letnew_item=payload.new_item;
letid=payload.id;
switch(action){
case'add-item':ListStore.addItem(new_item);break;
case'remove-item':ListStore.removeItem(id);break;
default:returntrue;
}
ListStore.emitChange();
returntrue;
});
//-----------------------------------
exportdefaultAppDispatcher;
36 / 40
importReactfrom'react';
importListStorefrom'../stores/ListStore';
importAppDispatcherfrom'../dispatcher/AppDispatcher';
importNewItemFormfrom'./NewItemForm';
//-----------------------------------
letgetListState=()=>{return{items:ListStore.getItems()};}
//-----------------------------------
classAppRootextendsReact.Component{
constructor(){super();this.state=getListState();}
_onChange(){this.setState(getListState());}
componentDidMount() {ListStore.addChangeListener(this._onChange.bind(this));}
componentWillUnmount(){ListStore.removeChangeListener(this._onChange.bind(this));}
removeItem(e){
letid=e.target.dataset.id;
AppDispatcher.dispatch({action:'remove-item',id:id});
}
render(){
let_this=this;
letitems=ListStore.getItems();
letitemHtml=items.map((listItem)=>{
return
});
return( ;
}
}
//-----------------------------------
exportdefaultAppRoot;
<likey={listItem.id}>{listItem.name}<buttononClick={_this.removeItem
<div><ul>{itemHtml}</ul><NewItemForm/></div>)
AppRoot.jsx
37 / 40
NewItemForm.jsx
importReactfrom'react';
importReactDOMfrom'react-dom';
importAppDispatcherfrom'../dispatcher/AppDispatcher';
//-----------------------------------
classNewItemFormextendsReact.Component{
createItem(e){
e.preventDefault();
letid=guid();
letitem_title=ReactDOM.findDOMNode(this.refs.item_title).value.trim();
ReactDOM.findDOMNode(this.refs.item_title).value='';
AppDispatcher.dispatch({action:'add-item',new_item:{id:id,name:item_title}
}
render(){
return
}
}
//-----------------------------------
functionguid(){
functions4(){returnMath.floor((1+Math.random())*0x10000).toString(16).substri
returns4()+s4()+'-'+s4()+'-'+s4()+'-'+s4()+'-'+s4()+s4()+s4();
}
//-----------------------------------
exportdefaultNewItemForm;
<formonSubmit={this.createItem.bind(this)}><inputtype="text"ref="item_
38 / 40
References
1. A JavaScript library for building user interfaces | React
2. Getting Started | React
3. Building A Simple React Application Using The Flux Pattern: A Step-By-Step Guide
4. flux/examples/flux-todomvc
39 / 40

END
Eueung Mulyana
http://eueung.github.io/js/react
JS CodeLabs | Attribution-ShareAlike CC BY-SA
40 / 40

More Related Content

What's hot

[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Previewvaluebound
 
Building Modern Web Applications using React and Redux
 Building Modern Web Applications using React and Redux Building Modern Web Applications using React and Redux
Building Modern Web Applications using React and ReduxMaxime Najim
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React NativeEric Deng
 
Starting with Reactjs
Starting with ReactjsStarting with Reactjs
Starting with ReactjsThinh VoXuan
 
Microservices with Spring Boot
Microservices with Spring BootMicroservices with Spring Boot
Microservices with Spring BootJoshua Long
 
React and Flux life cycle with JSX, React Router and Jest Unit Testing
React and  Flux life cycle with JSX, React Router and Jest Unit TestingReact and  Flux life cycle with JSX, React Router and Jest Unit Testing
React and Flux life cycle with JSX, React Router and Jest Unit TestingEswara Kumar Palakollu
 
I Heard React Was Good
I Heard React Was GoodI Heard React Was Good
I Heard React Was GoodFITC
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JSArno Lordkronos
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core ConceptsDivyang Bhambhani
 
Introduction to React JS for beginners | Namespace IT
Introduction to React JS for beginners | Namespace ITIntroduction to React JS for beginners | Namespace IT
Introduction to React JS for beginners | Namespace ITnamespaceit
 

What's hot (20)

[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
Reactjs
Reactjs Reactjs
Reactjs
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Preview
 
Building Modern Web Applications using React and Redux
 Building Modern Web Applications using React and Redux Building Modern Web Applications using React and Redux
Building Modern Web Applications using React and Redux
 
React JS - Introduction
React JS - IntroductionReact JS - Introduction
React JS - Introduction
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
 
Starting with Reactjs
Starting with ReactjsStarting with Reactjs
Starting with Reactjs
 
React js for beginners
React js for beginnersReact js for beginners
React js for beginners
 
How to Redux
How to ReduxHow to Redux
How to Redux
 
React and redux
React and reduxReact and redux
React and redux
 
Learn react-js
Learn react-jsLearn react-js
Learn react-js
 
Microservices with Spring Boot
Microservices with Spring BootMicroservices with Spring Boot
Microservices with Spring Boot
 
React and Flux life cycle with JSX, React Router and Jest Unit Testing
React and  Flux life cycle with JSX, React Router and Jest Unit TestingReact and  Flux life cycle with JSX, React Router and Jest Unit Testing
React and Flux life cycle with JSX, React Router and Jest Unit Testing
 
I Heard React Was Good
I Heard React Was GoodI Heard React Was Good
I Heard React Was Good
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JS
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
React JS part 1
React JS part 1React JS part 1
React JS part 1
 
Introduction to React JS for beginners | Namespace IT
Introduction to React JS for beginners | Namespace ITIntroduction to React JS for beginners | Namespace IT
Introduction to React JS for beginners | Namespace IT
 
React.js
React.jsReact.js
React.js
 

Similar to Introduction to React and Flux (CodeLabs)

Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tables
Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tablesWeb Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tables
Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tablesAl-Mamun Sarkar
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortalJennifer Bourey
 
intro to Angular js
intro to Angular jsintro to Angular js
intro to Angular jsBrian Atkins
 
Getting Started with React v16
Getting Started with React v16Getting Started with React v16
Getting Started with React v16Benny Neugebauer
 
Desenvolvimento web com jQuery Mobile
Desenvolvimento web com jQuery MobileDesenvolvimento web com jQuery Mobile
Desenvolvimento web com jQuery MobilePablo Garrido
 
Getting started with ReactJS
Getting started with ReactJSGetting started with ReactJS
Getting started with ReactJSKrishna Sunuwar
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationAndrew Rota
 
SPTechCon Boston 2015 - Whither SPServices?
SPTechCon Boston 2015 - Whither SPServices?SPTechCon Boston 2015 - Whither SPServices?
SPTechCon Boston 2015 - Whither SPServices?Marc D Anderson
 
Javascript MVVM with Vue.JS
Javascript MVVM with Vue.JSJavascript MVVM with Vue.JS
Javascript MVVM with Vue.JSEueung Mulyana
 
React basic by Yoav Amit, Wix
React basic by Yoav Amit, Wix React basic by Yoav Amit, Wix
React basic by Yoav Amit, Wix Chen Lerner
 
Basic Tutorial of React for Programmers
Basic Tutorial of React for ProgrammersBasic Tutorial of React for Programmers
Basic Tutorial of React for ProgrammersDavid Rodenas
 
Sharing Data between controllers in different ways.
Sharing Data between controllers in different ways.Sharing Data between controllers in different ways.
Sharing Data between controllers in different ways.Amar Shukla
 
Different way to share data between controllers in angular js
Different way to share data between controllers in angular jsDifferent way to share data between controllers in angular js
Different way to share data between controllers in angular jscodeandyou forums
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBob Paulin
 
Web Components v1
Web Components v1Web Components v1
Web Components v1Mike Wilcox
 

Similar to Introduction to React and Flux (CodeLabs) (20)

React
React React
React
 
Angular js
Angular jsAngular js
Angular js
 
Human Talks Riot.js
Human Talks Riot.jsHuman Talks Riot.js
Human Talks Riot.js
 
Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tables
Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tablesWeb Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tables
Web Design Course - Lecture 18 - Boostrap, Gatting started, grid system, tables
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
Let's react - Meetup
Let's react - MeetupLet's react - Meetup
Let's react - Meetup
 
intro to Angular js
intro to Angular jsintro to Angular js
intro to Angular js
 
Getting Started with React v16
Getting Started with React v16Getting Started with React v16
Getting Started with React v16
 
Desenvolvimento web com jQuery Mobile
Desenvolvimento web com jQuery MobileDesenvolvimento web com jQuery Mobile
Desenvolvimento web com jQuery Mobile
 
Getting started with ReactJS
Getting started with ReactJSGetting started with ReactJS
Getting started with ReactJS
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
SPTechCon Boston 2015 - Whither SPServices?
SPTechCon Boston 2015 - Whither SPServices?SPTechCon Boston 2015 - Whither SPServices?
SPTechCon Boston 2015 - Whither SPServices?
 
Javascript MVVM with Vue.JS
Javascript MVVM with Vue.JSJavascript MVVM with Vue.JS
Javascript MVVM with Vue.JS
 
React basic by Yoav Amit, Wix
React basic by Yoav Amit, Wix React basic by Yoav Amit, Wix
React basic by Yoav Amit, Wix
 
Upload[1]
Upload[1]Upload[1]
Upload[1]
 
Basic Tutorial of React for Programmers
Basic Tutorial of React for ProgrammersBasic Tutorial of React for Programmers
Basic Tutorial of React for Programmers
 
Sharing Data between controllers in different ways.
Sharing Data between controllers in different ways.Sharing Data between controllers in different ways.
Sharing Data between controllers in different ways.
 
Different way to share data between controllers in angular js
Different way to share data between controllers in angular jsDifferent way to share data between controllers in angular js
Different way to share data between controllers in angular js
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 
Web Components v1
Web Components v1Web Components v1
Web Components v1
 

More from Eueung Mulyana

Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
Hyper-Connectivity and Data Proliferation - Ecosystem PerspectiveHyper-Connectivity and Data Proliferation - Ecosystem Perspective
Hyper-Connectivity and Data Proliferation - Ecosystem PerspectiveEueung Mulyana
 
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated WorldIndustry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated WorldEueung Mulyana
 
Blockchain Introduction
Blockchain IntroductionBlockchain Introduction
Blockchain IntroductionEueung Mulyana
 
Bringing Automation to the Classroom: A ChatOps-Based Approach
Bringing Automation to the Classroom: A ChatOps-Based ApproachBringing Automation to the Classroom: A ChatOps-Based Approach
Bringing Automation to the Classroom: A ChatOps-Based ApproachEueung Mulyana
 
FinTech & Cryptocurrency Introduction
FinTech & Cryptocurrency IntroductionFinTech & Cryptocurrency Introduction
FinTech & Cryptocurrency IntroductionEueung Mulyana
 
Open Source Networking Overview
Open Source Networking OverviewOpen Source Networking Overview
Open Source Networking OverviewEueung Mulyana
 
ONOS SDN Controller - Clustering Tests & Experiments
ONOS SDN Controller - Clustering Tests & Experiments ONOS SDN Controller - Clustering Tests & Experiments
ONOS SDN Controller - Clustering Tests & Experiments Eueung Mulyana
 
Open stack pike-devstack-tutorial
Open stack pike-devstack-tutorialOpen stack pike-devstack-tutorial
Open stack pike-devstack-tutorialEueung Mulyana
 
ONOS SDN Controller - Introduction
ONOS SDN Controller - IntroductionONOS SDN Controller - Introduction
ONOS SDN Controller - IntroductionEueung Mulyana
 
OpenDaylight SDN Controller - Introduction
OpenDaylight SDN Controller - IntroductionOpenDaylight SDN Controller - Introduction
OpenDaylight SDN Controller - IntroductionEueung Mulyana
 
Android Programming Basics
Android Programming BasicsAndroid Programming Basics
Android Programming BasicsEueung Mulyana
 
Cloud Computing: Overview and Examples
Cloud Computing: Overview and ExamplesCloud Computing: Overview and Examples
Cloud Computing: Overview and ExamplesEueung Mulyana
 
selected input/output - sensors and actuators
selected input/output - sensors and actuatorsselected input/output - sensors and actuators
selected input/output - sensors and actuatorsEueung Mulyana
 
Connected Things, IoT and 5G
Connected Things, IoT and 5GConnected Things, IoT and 5G
Connected Things, IoT and 5GEueung Mulyana
 
Connectivity for Local Sensors and Actuators Using nRF24L01+
Connectivity for Local Sensors and Actuators Using nRF24L01+Connectivity for Local Sensors and Actuators Using nRF24L01+
Connectivity for Local Sensors and Actuators Using nRF24L01+Eueung Mulyana
 
NodeMCU with Blynk and Firebase
NodeMCU with Blynk and FirebaseNodeMCU with Blynk and Firebase
NodeMCU with Blynk and FirebaseEueung Mulyana
 
Trends and Enablers - Connected Services and Cloud Computing
Trends and Enablers  - Connected Services and Cloud ComputingTrends and Enablers  - Connected Services and Cloud Computing
Trends and Enablers - Connected Services and Cloud ComputingEueung Mulyana
 

More from Eueung Mulyana (20)

FGD Big Data
FGD Big DataFGD Big Data
FGD Big Data
 
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
Hyper-Connectivity and Data Proliferation - Ecosystem PerspectiveHyper-Connectivity and Data Proliferation - Ecosystem Perspective
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
 
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated WorldIndustry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
 
Blockchain Introduction
Blockchain IntroductionBlockchain Introduction
Blockchain Introduction
 
Bringing Automation to the Classroom: A ChatOps-Based Approach
Bringing Automation to the Classroom: A ChatOps-Based ApproachBringing Automation to the Classroom: A ChatOps-Based Approach
Bringing Automation to the Classroom: A ChatOps-Based Approach
 
FinTech & Cryptocurrency Introduction
FinTech & Cryptocurrency IntroductionFinTech & Cryptocurrency Introduction
FinTech & Cryptocurrency Introduction
 
Open Source Networking Overview
Open Source Networking OverviewOpen Source Networking Overview
Open Source Networking Overview
 
ONOS SDN Controller - Clustering Tests & Experiments
ONOS SDN Controller - Clustering Tests & Experiments ONOS SDN Controller - Clustering Tests & Experiments
ONOS SDN Controller - Clustering Tests & Experiments
 
Open stack pike-devstack-tutorial
Open stack pike-devstack-tutorialOpen stack pike-devstack-tutorial
Open stack pike-devstack-tutorial
 
Basic onos-tutorial
Basic onos-tutorialBasic onos-tutorial
Basic onos-tutorial
 
ONOS SDN Controller - Introduction
ONOS SDN Controller - IntroductionONOS SDN Controller - Introduction
ONOS SDN Controller - Introduction
 
OpenDaylight SDN Controller - Introduction
OpenDaylight SDN Controller - IntroductionOpenDaylight SDN Controller - Introduction
OpenDaylight SDN Controller - Introduction
 
Mininet Basics
Mininet BasicsMininet Basics
Mininet Basics
 
Android Programming Basics
Android Programming BasicsAndroid Programming Basics
Android Programming Basics
 
Cloud Computing: Overview and Examples
Cloud Computing: Overview and ExamplesCloud Computing: Overview and Examples
Cloud Computing: Overview and Examples
 
selected input/output - sensors and actuators
selected input/output - sensors and actuatorsselected input/output - sensors and actuators
selected input/output - sensors and actuators
 
Connected Things, IoT and 5G
Connected Things, IoT and 5GConnected Things, IoT and 5G
Connected Things, IoT and 5G
 
Connectivity for Local Sensors and Actuators Using nRF24L01+
Connectivity for Local Sensors and Actuators Using nRF24L01+Connectivity for Local Sensors and Actuators Using nRF24L01+
Connectivity for Local Sensors and Actuators Using nRF24L01+
 
NodeMCU with Blynk and Firebase
NodeMCU with Blynk and FirebaseNodeMCU with Blynk and Firebase
NodeMCU with Blynk and Firebase
 
Trends and Enablers - Connected Services and Cloud Computing
Trends and Enablers  - Connected Services and Cloud ComputingTrends and Enablers  - Connected Services and Cloud Computing
Trends and Enablers - Connected Services and Cloud Computing
 

Recently uploaded

OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2
 
Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2WSO2
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
WSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital BusinessesWSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital BusinessesWSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
WSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid EnvironmentsWSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid EnvironmentsWSO2
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 

Recently uploaded (20)

OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - Kanchana
 
Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration Tooling
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital BusinessesWSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital Businesses
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid EnvironmentsWSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid Environments
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 

Introduction to React and Flux (CodeLabs)