What's new in React 16
Agata Krzywda
Software Engineer at Lloyds Banking Group
https://twitter.com/aghh1504 https://medium.com/@aghh1504Free React Courses
http://codestorms.com/New features of React 16
- Error handling
- Render array, string, numbers
- Custom DOM attributes
- Improved server-side rendering
- Update State
Error Handling
class ErrorBoundary extends Component {
state = { hasError: '' };
componentDidCatch(error, info) {
this.setState({ hasError: error.message });
}
render() {
if (this.state.hasError) {
return (
<h1>Something went wrong: {this.state.hasError}</h1>
);
}
return this.props.children;
}
}
const Profile = ({userName}) => {
if (userName === 'noname') {
throw new Error('Wrong name for user!');
}
return <h1>Name: {userName}</h1>
};
const Age = ({age}) => {
if (!age) {
throw new Error('Wrong age for user!');
}
return <h1>Age: {age}</h1>
};
class App extends Component {
state = {
userName: "",
age: 27
};
onChange = (e) => {
this.setState({userName: e.target.value});
};
onHandleButton = () => {
this.setState({age: null})
}
render() {
return (
<div>
<ErrorBoundary>
<input type="text"
value={this.state.userName}
onChange={this.onChange} />
<Profile userName={this.state.userName} />
</ErrorBoundary>
<ErrorBoundary>
<Age age={this.state.age}/>
<button onClick={this.onHandleButton}>Change Age</button>
</ErrorBoundary>
</div>
);
}
}
Render Multiple Elements
class MyArrayComponent extends React.Component
render() {
return [
<li key="one">First item</li>,
<li key="two">Second item</li>,
<li key="three">Third item</li>,
<li key="four">Fourth item</li>,
];
}
Render String and Numbers
class MyStringComponent extends Component {
render() {
return "hey there";
}
}
class MyNumberComponent extends Component {
render() {
return 2;
}
}
const App = () => {
return 'Hello World!!!'
}
Update State
class App extends Component {
state = { city: 'London' };
selectCity = evt => {
const newValue = evt.target.value;
this.setState(state => {
if (state.city === newValue) {
//return null what stop rerender
return null;
}
return {
city: newValue
};
});
};
render() {
return (
<div>
<button type="button" value="london" onClick={this.selectCity}>
London
</button>
<button type="button" value="paris" onClick={this.selectCity}>
Paris
</button>
<City name={this.state.city} />
</div>
);
}
}
Define DOM Attributes
class App extends React.Component {
render() {
return (
<div
my-attribute="foo"
class="bar"
>
Hello!
</div>
);
}
}
Resources
Leverage New Features of React 16 - Egghead online course by Nik Graf
What’s New With Server-Side Rendering in React 16 - www.hackernoon.com by Sasha Aickin
React 16
By Agata Krzywda
React 16
- 1,325