React
- nie jest frameworkiem
- biblioteka do zarządzania UI
- minimalne API
React - komponenty
źródło: https://facebook.github.io/react/img/blog/thinking-in-react-components.png
Staramy się wydzielić jak najmniejsze i jak najbardziej reużywalne części naszych widoków
- formularz
- lista
- element-listy
- przycisk
- input
React
// import biblioteki React
import React from 'react';
// Stworzenie klasy komponentu
// Komponenty muszą dziedziczyć z React.Component
class MyComponent extends React.Component {
// Każdy komponent musi mieć funkcje render
// jest ona odpowiedzialna za to jak nasz
// komponent będzie prezentowany na stronie
render() {
var name = "My Name";
return (
// JSX pozwala na tworzenie w przyjazny sposób html
// wewnątrz javascript. Możemy osadzać kod javascript wewnątrz {}
<div>Hello from react component {name + " appended string"}</div>
)
}
}
React - JSX
- możemy osadzać javascript wewnątrz {}
- class -> className
- style CSS pisane jako obiekt oraz "-" zamienione na camelCase (font-size -> fontSize)
- podpinanie eventów onClick, onChange, onFocus
React - JSX
<div>
<h2 style={{ fontSize: 20, padding: 0 }}>Product form</h2>
<label>{labelName}</label>
<button onClick={this.addProduct}>Add product</button>
</div>
React - setState
class MyComponent extends React.Component {
constructor(props) {
this.state = {
counter: 0
};
}
increase() {
this.setState({ counter: this.state.counter + 1 });
}
render() {
return (
<div>
<span>current counter: {this.state.counter}</span>
<button onClick={this.increase}>Increase</button>
</div>
)
}
}
React - props
class ChildComponent extends React.Component {
render() {
return <span>child component: {this.props.name}</span>
}
}
class ParentComponent extends React.Component {
render() {
return (
<div>
<ChildComponent name={"props from parent"} />
</div>
)
}
}
React - defaultProps
class ChildComponent extends React.Component {
render() {
return <span>child component: {this.props.name}</span>
}
}
ChildComponent.defaultProps = {
name: 'default name'
};
class ParentComponent extends React.Component {
render() {
return (
<div>
<ChildComponent name={"props from parent"} />
</div>
)
}
}
React - propTypes
import PropTypes from 'prop-types';
class ChildComponent extends React.Component {
render() {
return <span>child component: {this.props.name}</span>
}
}
ChildComponent.propTypes = {
name: PropTypes.string.isRequired
};
yarn add prop-types
React - coding time!
- lista postów
- dodawanie postów
- usuwanie postów
React blog
Redux
Redux is a predictable state container for JavaScript apps.
Redux
Redux
Niemutowalne struktury
const arr = [1, 2, 3];
// źle, zmieniamy wartości istniejącej tablicy
arr.push(3);
arr.push(4);
// dobrze, tworzymy nową tablicę
const arr2 = [...arr, 3, 4];
const obj = { name: 'test' };
// źle, mutujemy istniejący obiekt
obj['new_key'] = 'new value';
// dobrze, stworzony został nowy obiekt
const obj2 = {...obj, new_key: 'new_value'};
Redux
import { createStore } from 'redux'
const initialState = {};
createStore(initialState);
react-redux
<Provider store={store}>
<App />
</Provider>
import React from 'react';
import {connect} from 'react-redux';
class MyComponent extends React.Component {
render() {
return (
<div>{this.props.todos}</div>
);
}
}
function mapStateToProps(state) {
return { todos: state.todos }
}
export default connect(mapStateToProps)(MyComponent)
Praktyki 2
By vrael560
Praktyki 2
- 359