React
Hva er React? (1/3)
- Bibliotek for å bygge brukergrensesnitt
Hvordan?
- Bygger en virituell DOM
- Bygd opp av funskjoner
- DOM-diffing mellom virituell og aktuell
UI bygget opp av komponenter
- Komponent er en instans av en klasse
- Klasse må inneholde render()
var HelloWorld = React.createClass({
render: function() {
return (
<div>
<h1> Hello World! </h1>
</div>
);
}
});
JSX
- JS-syntaks som likner XML
- Enklere å lese og jobbe med
var HelloWorld = React.createClass({
render: function() {
return (
<div>
<h1> Hello World! </h1>
<p> Dette er et eksempel </p>
</div>
);
}
});
Uten JSX
var HelloWorld = React.createClass({
render: function() {
return (
React.createElement("div", null,
React.createElement("h1", null, "HelloWorld"),
React.createElement("p", null, "Dette er et eksempel")
)
);
}
});
Nestede komponenter
- UI består av et tre av komponenter
var InnerComponent = React.createClass({
render: function() {
return (
<p>
Dette er et eksempel
</p>
);
}
});
var HelloWorld = React.createClass({
render: function() {
return (
<div>
<h1> Hello World! </h1>
<InnerComponent />
</div>
);
}
});
Komponenter innholder to typer data
this.props
this.state
Mutable
(med this.setState)
Immutable
this.props - Properties
- Dette er hvordan data beveger seg ned treet av komponenter
- Kommer fra forelder-komponent
- Alltid immutable data
Eksempel
var InnerComponent = React.createClass({
render: function() {
return (
<p>
{this.props.innertext}
</p>
);
}
});
var HelloWorld = React.createClass({
render: function() {
return (
<div>
<h1> Hello World! </h1>
<InnerComponent innertext="Dette er et eksempel" />
</div>
);
}
});
this.state
- Beskriver en tilstand i en komponent
- Eks. dropdown
- Gjelder kun for en komponent
- Mutable - men endres kun via this.setState-metoden
- Trigger render-metoden
Eksempel
var CounterComponent = React.createClass({
getInitialState: function(){
return {
counter: 1
};
},
_onClick: function (event) {
this.setState({
counter: this.state.counter + 1
});
},
render: function() {
return (
<div>
<p>
Counter: {this.state.counter}
</p>
<button onClick={this._onClick}> 1 up </button>
</div>
);
}
});
Hva er React? (2/3)
- Bibliotek for å bygge brukergrensesnitt
- Lager et tre av komponenter/render-funksjoner
- Data sendes som parametere
- Funksjonene returnerer HTML
Collection rendering
var MessagesComponent = React.createClass({
getInitialState: function(){
return {
messages: [
{text: "Lorem ipsum dolor sit amet"},
{text: "Cras convallis congue"},
{text: "Donec cursus leo malesuada"}
]
};
},
render: function() {
var messages = this.state.messages.map(function (message) {
return (
<p>{message.text}</p>
);
});
return (
<div>
{messages}
</div>
);
}
});
Behind the scenes
-
this.setState() endrer tilstanden til en komponent
-
render() blir kalt, som igjen rekursivt kaller render() på alle barnekomponenter
-
Sender med eventuelle props
-
Sender med eventuelle props
-
render() resulterer i et tre av Reacts egne datastruktur
-
Virtual DOM
-
Virtual DOM
- Differansen mellom virtuell og ekte DOM blir beregnet,
og ekte DOM blir oppdatert dersom nødvendig
class MainComponent extends React.Component {
constructor(props){
this.state = {
win: "lost damn!",
};
}
render() {
return (
<div>
<h1> Hello World </h1>
</div>
);
}
};
The ES6 way
var InputComponent = React.createClass({
getInitialState: function(){
return {
placeholder: "Input here"
};
},
render: function() {
return (
<div>
<textarea placeholder={this.state.placeholder} />
</div>
);
}
});
module.exports = InputComponent;
The "old" way
Hva er React? (3/3)
- Bibliotek for å bygge brukergrensesnitt
- Lager et tre av komponenter/render-funksjoner
- Data sendes som parametere
- Funksjonene returnerer HTML
- Komplett re-rendering for hver tilstandsendring i komponenten
React lifecycle
- componentWillMount( )
- componentWIllUnmount( )
Mount/Unmount
Update
- componentWillRecieveProps( nextprops )
- shouldComponentUpdate( nextProps, nextState )
- componentWillUpdate( nextProps, nextState )
That's it folkz!
https://github.com/magnudae
React mini-intro
By Magnús Dæhlen
React mini-intro
- 1,071