We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
谈必及React。
虚拟DOM很快,但他并不是没有性能瓶颈,因为React在render之前会做虚拟DOM树的比较操作,如果数据并没有发生改变,做这个额外的比较操作无疑是会增加开销的。好在React给出了自己的解决方案,那就是shouldComponentUpdate,shouldComponentUpdate的含义是这样的,在Component接受到新的props或者state,将要渲染之前调用,如果返回 false,那么组件不会更新。这里shouldComponentUpdate传入了两个参数,nextProps和 nextState,我们可以通过拿到的参数和当前的props和state进行比较,判断如果相等,那么返回false,告知组件不去更新。你可以使用PureRenderMixin插件,来帮你重复执行这个操作。
var PureRenderMixin = require('react').addons.PureRenderMixin; React.createClass({ mixins: [PureRenderMixin], render: function() { return <div className={this.props.className}>foo</div>; } });
不过通过PurePenderMixin你只能进行浅层次的比较,如果想要使用深层比较的话,数据层你可以采用immutable-js,然后再使用上react-immutable-render-mixin就可以进行深层次比较了。
在智慧组件和木偶组件的概念中,可复用的组件是木偶组件,而起到控制展示作用的是智慧组件。
React经常被拿去做单页面应用,react-router是一个不错的React路由管理框架。
var routes = ( <Route handler={App} path="/"> <DefaultRoute handler={Home} /> <Route name="about" handler={About} /> <Route name="users" handler={Users}> <Route name="recent-users" path="recent" handler={RecentUsers} /> <Route name="user" path="/user/:userId" handler={User} /> <NotFoundRoute handler={UserRouteNotFound}/> </Route> <NotFoundRoute handler={NotFound}/> <Redirect from="company" to="about" /> </Route> ); Router.run(routes, function (Handler) { React.render(<Handler/>, document.body); }); // Or, if you'd like to use the HTML5 history API for cleaner URLs: Router.run(routes, Router.HistoryLocation, function (Handler) { React.render(<Handler/>, document.body); });
做过移动端的同学都知道,ios在处理click事件的时候有300ms的延迟。在zepto的方案下我们会有一个tap事件去解决这个问题,而在React中我们可以使用react-tap-event-plugin
var React = require('react'), injectTapEventPlugin = require("react-tap-event-plugin"); injectTapEventPlugin(); var Main = React.createClass({ render: function() { return <button onTouchTap={this._handleTouchTap}>Tap Me</button> }, _handleTouchTap: function() { alert('Tap'); } }); React.render(<Main />, document.body);
React的动画库,react-tween-state.
var tweenState = require('react-tween-state'); var React = require('react'); var App = React.createClass({ mixins: [tweenState.Mixin], getInitialState: function() { return {left: 0}; }, handleClick: function() { this.tweenState('left', { easing: tweenState.easingTypes.easeInOutQuad, duration: 500, endValue: this.state.left === 0 ? 400 : 0 }); }, render: function() { var style = { position: 'absolute', width: 50, height: 50, backgroundColor: 'lightblue', left: this.getTweeningValue('left') }; return <div style={style} onClick={this.handleClick} />; } });
The text was updated successfully, but these errors were encountered:
No branches or pull requests
React优势
Virtual DOM的性能瓶颈
虚拟DOM很快,但他并不是没有性能瓶颈,因为React在render之前会做虚拟DOM树的比较操作,如果数据并没有发生改变,做这个额外的比较操作无疑是会增加开销的。好在React给出了自己的解决方案,那就是shouldComponentUpdate,shouldComponentUpdate的含义是这样的,在Component接受到新的props或者state,将要渲染之前调用,如果返回 false,那么组件不会更新。这里shouldComponentUpdate传入了两个参数,nextProps和 nextState,我们可以通过拿到的参数和当前的props和state进行比较,判断如果相等,那么返回false,告知组件不去更新。你可以使用PureRenderMixin插件,来帮你重复执行这个操作。
不过通过PurePenderMixin你只能进行浅层次的比较,如果想要使用深层比较的话,数据层你可以采用immutable-js,然后再使用上react-immutable-render-mixin就可以进行深层次比较了。
智慧组件和木偶组件
在智慧组件和木偶组件的概念中,可复用的组件是木偶组件,而起到控制展示作用的是智慧组件。
木偶组件
智能组件
这样写的好处
路由
React经常被拿去做单页面应用,react-router是一个不错的React路由管理框架。
移动端tap事件
做过移动端的同学都知道,ios在处理click事件的时候有300ms的延迟。在zepto的方案下我们会有一个tap事件去解决这个问题,而在React中我们可以使用react-tap-event-plugin
动画
React的动画库,react-tween-state.
延伸阅读
The text was updated successfully, but these errors were encountered: