https://github.com/magnudae/react-workshop
UI bygget opp av komponenter
var HelloWorld = React.createClass({
render: function() {
return (
<div>
<h1> Hello World! </h1>
</div>
);
}
});
JSX
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")
)
);
}
});Oppgave
Gjør om MainComponent til å skrive ut
1. "Hello World!" i en <h1>
2. Noe tekst i en <p>
Ekstra: Legg til et bilde og bruk imageUrl som src
Nestede 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>
);
}
});Oppgave
Lag en ny komponent og flytt enten <h1>-en eller <p>-en fra MainComponent dit
Ekstra: Lag den nye komponenten i en egen fil
Mutable
(med this.setState)
Immutable
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>
);
}
});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>
);
}
});1. Send en property inn i den nye komponenten og vis den på skjermen
2. Lag en ny tilstandsvariabel og vis den på skjermen (hint: getInitialState)
3. Lag en button og oppdater den nye tilstanden med onClick
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>
);
}
});Send en liste (med lengde > 1) med tekster som props til barnekomponenten din, og vis disse tekstene i hver
sin <li>-tag inni en <ul>-tag
Ekstra: Se i konsollen i nettleseren din. Får du
feilmelding fra React? Hvorfor?
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
var Flux = <require McFly instance>;
var _text = [];
var Store = Flux.createStore({
emitChange: function() {
this.emit("CHANGE_EVENT");
},
addChangeListener: function(callback) {
this.on("CHANGE_EVENT", callback);
},
getText: function(){
return _text;
}
}, function(payload){
if(payload.actionType === "TEST_ACTION") {
_text.push(payload.text);
Store.emitChange();
}
});
var Flux = <require McFly instance>;
var Actions = Flux.createActions({
testAction: function(text) {
return {
actionType: 'TEST_ACTION',
text: text
}
}
});
Lag en ny action
Eks: onClick sender tekst action
Ta i mot den nye actionen i storen
Eks: Lagre innkommende tekst
Oppdater applikasjonen
Eks: Få appen til å oppdateres på en change emit
Mount/Unmount
Update
Lag en shouldComponentUpdate funksjon som bare oppdaterer component i spesielle cases
Eks: Hver gang vi har et partall antall meldinger
Bruk componentWillRecieveProps til å påvirke
staten til componenten
Eks: Sett placeholder state ifra props