Slide 1

Slide 1 text

React.js v0.14 changes React.js meetup #2 @koba04

Slide 2

Slide 2 text

@koba04 • Web Application Engineer • http://koba04.com/

Slide 3

Slide 3 text

Thanks for many stocks and bookmarks!!

Slide 4

Slide 4 text

http://blog.coderifleman.com/post/122232296024/reactjs%EB%A5%BC-%EC%9D%B4%ED%95%B4%ED %95%98%EB%8B%A41 Thanks for translating into Korean!

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

v0.14 NO W BETA-3! This slide based on the master branch. (2fa59aa)

Slide 7

Slide 7 text

Stateless Components! • You can define ReactComponent with just a function! • More performance optimizations. • As minimal implementation in v0.14.

Slide 8

Slide 8 text

Stateless Components function Avatar(props) { return (
{props.name}
); } function Modal({title, children}) { return (

{title}

{children}
); }

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Stateless Components // PropTypes function Avatar({name, id) { return (
{name}
); } Avatar.defaultProps = {name: ‘default’, id: 999}; Avatar.propTypes = { name: React.PropTypes.string.isRequired, id: React.PropTypes.number.isRequired };

Slide 13

Slide 13 text

Stateless Components // Context function Avatar({name, id, context) { const {staticHost} = context; return (
{name}
); } Avatar.contextTypes = { staticHost: React.PropTypes.string };

Slide 14

Slide 14 text

Stateless Components // Module pattern function Avatar({name, id) { return { render() { return (
{name}
); }, shouldComponentUpdate(nextProps) { return this.props.name !== nextProps.name; } }; } Sorry, I’ve misunderstood… This is not treated as Stateless Components

Slide 15

Slide 15 text

DOM node refs • You can get DOM nodes as the DOM Component refs! • React.render with DOM Component returns DOM nodes • ReactDOM.findDOMNode still uses for Composite Component.

Slide 16

Slide 16 text

DOM node refs class App extends React.Component { componentDidMount() { this.refs.text.focus(); } render() { return ; } } const el = React.render(
, document.querySelector(‘#app’)); console.log(el.innerHTML); const app = React.render(, document.querySelector(‘#app’)); console.log(ReactDOM.findDOMNode(app).innerHTML);

Slide 17

Slide 17 text

Separate packages • React • Isomorphic libraries • ReactDOM • DOM Environment • Including server-side rendering • Addons • react-addons-{name}

Slide 18

Slide 18 text

React • npm install react; • import React from ‘react’; • React.Component, React.createElement, React.Proptypes, React.Children... • Isomorphic - DOM, Native, Canvas...

Slide 19

Slide 19 text

ReactDOM • npm install react-dom • import ReactDOM from ‘react-dom’; • ReactDOM.render, ReactDOM.findDOMNode, ReactDOM.unmountComponentAtNode... • import ReactDOMServer from ‘react-dom/server’; • ReactDOMServer.renderToString, ReactDOMServer.renderToStaticMarkup

Slide 20

Slide 20 text

import React from ‘react’; import ReactDOM from ‘react-dom’; class App extends React.Component { render() { const {name} = this.props; return (

Hello {name}

); } } ReactDOM.render(, document.getElementById(‘app’));

Slide 21

Slide 21 text

Addons • npm install react-addons-{name} • transition-group, css-transition-group, • linked-state-mixin, pure-render-mixin, • create-fragment, shallow-compare, • update, clone-with-props, • test-utils, perf

Slide 22

Slide 22 text

unstable_batchedUpdates • Deprecate React.addons.batched_updates const c = ReactDOM.render(, document.querySelector('#app')); ReactDOM.unstable_batchedUpdates(() => { c.setState({count: c.state.count}); c.setState({count: c.state.count}); });

Slide 23

Slide 23 text

src ᵓᴷᴷ addons ᴹ ᵓᴷᴷ link ᴹ ᵓᴷᴷ transitions ᵓᴷᴷ isomorphic ᴹ ᵓᴷᴷ children ᴹ ᵓᴷᴷ classic ᴹ ᴹ ᵓᴷᴷ class ᴹ ᴹ ᵓᴷᴷ element ᴹ ᴹ ᵋᴷᴷ types ᴹ ᵓᴷᴷ deprecated ᴹ ᵋᴷᴷ modern ᴹ ᵓᴷᴷ class ᴹ ᵓᴷᴷ element ᴹ ᵋᴷᴷ types ᵓᴷᴷ renderers ᴹ ᵓᴷᴷ dom ᴹ ᴹ ᵓᴷᴷ client ᴹ ᴹ ᵓᴷᴷ server ᴹ ᴹ ᵋᴷᴷ shared ᴹ ᵋᴷᴷ shared ᴹ ᵓᴷᴷ event ᴹ ᵋᴷᴷ reconciler ᵓᴷᴷ shared ᴹ ᵓᴷᴷ stubs ᴹ ᵓᴷᴷ utils ᴹ ᵋᴷᴷ vendor ᵋᴷᴷ test

Slide 24

Slide 24 text

Deprecate react-tools • use Babel instead of react-tools • jsx command -> babel • reactify -> babelify • JSXTransform -> babel-core/browser.js • node-jsx -> babel/register

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

React Babel • Babel optimisation options for React. • optimisation.react.constantElements • optimisation.react.inlineElements • for production build.

Slide 27

Slide 27 text

http://facebook.github.io/react/blog/2015/02/24/streamlining-react-elements.html

Slide 28

Slide 28 text

constantElements class App extends React.Component { render() { return
hello{this.props.name}
; } } // ↓↓ var _ref = _react2['default'].createElement(‘span', null, 'hello'); var App = (function (_React$Component) { // … _createClass(App, [{ key: 'render', value: function render() { return _react2['default'].createElement( ‘div’, null, _ref, _react2['default'].createElement(‘span', null, this.props.name) ); } }]);

Slide 29

Slide 29 text

inlineElements ReactDOM.render(
foo
, document.getElementById(‘app') ); // ↓↓ _reactDom2['default'].render({ type: App, ref: null, props: _defaultProps(App.defaultProps, { children: { type: 'div', ref: null, props: {children: 'foo'}, key: null }, name: 'foo' }), key: null }, document.getElementById('app'));

Slide 30

Slide 30 text

Babel 6.0 • https://github.com/babel/babel/issues/2168 • No internal transformers. • Presets • "plugins": ["preset-es2015", "preset-react"]

Slide 31

Slide 31 text

Presets • babel-preset-react // index.js module.exports = { plugins: [ require("babel-plugin-jsx"), require("babel-plugin-flow"), require("babel-plugin-react-jsx"), require("babel-plugin-flow-comments"), ] };

Slide 32

Slide 32 text

Others • Allow arbitrary attributes on dashed tags. • Object.freeze props in createElement in DEV. • Make React.addons.createFragment return a toArray. • Kill _isReactElement and ComponentClass.type. • Deprecated React.addons.cloneWithProps. me!

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

W

Slide 35

Slide 35 text

v0.15? • Garbage collection release • Shortly after 0.14? • Remove monkey patching of DOM elements for refs. • Remove deprecated APIs, making properly decoupled • Deprecate replaceState and isMounted? • Add trusted key for ReactElements?

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Animation https://github.com/chenglou/react-motion

Slide 39

Slide 39 text

Slack http://www.reactiflux.com/

Slide 40

Slide 40 text

Discussion https://discuss.reactjs.org/

Slide 41

Slide 41 text

Thank you! speakerdeck.com/koba04