Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dongtong/react_cheatsheet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

14 Commits

Repository files navigation

#React Cheatsheet

##其他格式

入门

使用React.js jsfiddle开始Hack。(或者使用非官方的jsbin)

var Component = React.createClass({
 render: function() {
 return <div>Hello {this.props.name}</div>;
 }
}); 
ReactDOM.render(<Component name="John" />, document.body);

##嵌套

使用嵌套组件分离关注点。查看多组件

var UserAvatar = React.createClass({ ... });
var UserProfile = React.createClass({ ... });
var Info = React.createClass({
 render() {
 return (
 <div>
 <UserAvatar src={this.props.avatar} />
 <UserProfile username={this.props.username} />
 </div>
 );
 }
});

##状态和属性

使用props(this.props)访问父类传递过来的参数。使用state(this.state)管理动态数据。

<MyComponent fullscreen={true} />
//属性
this.props.fullscreen //=> true
//状态
this.setState({username: 'rstacruz'});
this.replaceState({ ... });
this.state.username //=> 'rstacruz'
render: function() {
 return (
 <div className={this.props.fullscreen ? 'full' : ''}>
 Welcome, {this.state.username}
 </div>
 );
}

###设置默认值

提前渲染this.state.comments和this.props.name。

React.createClass({
 getInitialState: function () {
 return { comments: []};
 }
 
 getDefaultProps: function () {
 return { name: "Hello"};
 }
});

##组件API

这些是组件实例可以访问的方法。查看组件API

ReactDOM.findDOMNode(c) // 0.14+
React.findDOMNode(c) // 0.13
c.getDOMNode() // 0.12 以下
c.forceUpdate()
c.isMounted()
c.state
c.props
c.setState({ ... })
c.replaceState({ ... })
c.setProps({ ... }) //废弃
c.replaceProps({ ... }) //废弃
c.refs

###组件规范

你可以重写方法和属性。查看组件规范

render()
getInitialState()
getDefaultProps()
mixins: [ ... ] 混入... [更多](http://ricostacruz.com/cheatsheets/react.html#mixins)
propTypes: { ... } 校验... [更多](http://ricostacruz.com/cheatsheets/react.html#property-validation)
statics: { ... } 静态方法
displayName: "..." JSX自动填充

##生命周期

###挂载

在初始化渲染之前。在didMount上加一些DOM之类的东西(events, timer之类)。查看参考

componentWillMount() 在渲染之前(还没有DOM)
componentDidMount() 在渲染之后

###更新

当父类改变属性和调用.setState()时调用。这些不会在初始化渲染的时候调用。查看参考

componentWillReceiveProps (newProps={}) 这里使用setState()
shouldComponentUpdate (newProps={}, newState={}) 如果返回false,不会调用render()
componentWillUpdate (newProps={} newState={}) 这里不能使用setState()
componentDidUpdate(preProps={}, preState={}) 这里在DOM上操作

###卸载

这里清理DOM上的一些东西(可能在didMount上已经完成)。查看参考

componentWillUnmount() 在DOM移除之前调用

###示例: 加载数据

查看初始化Ajax数据

React.createClass({
 componentWillMount: function () {
 $.get(this.props.url, function (data) {
 this.setState(data);
 }.bind(this));
 }
 
 render: function () {
 return <CommentList data={this.state.data} />
 }
});

##DOM节点

###参考

允许访问DOM节点。 查看参考

<input ref="myInput" />
this.refs.myInput
ReactDOM.findDOMNode(this.refs.myInput).focus()
ReactDOM.findDOMNode(this.refs.myInput).value

###DOM事件

增加类似onChange属性。查看事件

<input type="text"
 value={this.state.value}
 onChange={this.handleChange} />
handleChange: function (event) {
 this.setState({value: event.target.value});
}

###双向绑定

使用LinkedStateMixin轻松实现双向绑定。

Email: <input type="email" valueLink={this.linkState('email')} />
React.createClass({
 mixins: [React.addons.LinkedStateMixin]
});
this.state.email

##属性校验

###基础类型

原始类型: .string, .number, .func, 和 .bool。查看propTypes

React.createClass({
 propTypes: {
 email: React.PropTypes.string,
 seats: React.PropTypes.number,
 settings: React.PropTypes.object,
 callback: React.PropTypes.func,
 isClosed: React.PropTypes.bool,
 any: React.PropTypes.any
 }
});

###必填类型

添加.isRequired。

propTypes: {
 requiredFunc: React.PropTypes.func.isRequired,
 requiredAny: React.PropTypes.any.isRequired
}

###React元素

使用.element, .node。

propTypes: {
 element: React.PropTypes.element, //react元素
 node: React.PropTypes.node //num, string, element
 // ...或者它们的数组
}

###枚举

使用 .oneOf, .oneOfType。

propTypes: {
 enum: React.PropTypes.oneOf(['M', 'F']), //枚举
 union: React.PropTypes.oneOfType([ //任何一个
 React.PropTypes.string,
 React.PropTypes.number
 ])
}

###数组和对象

使用 .array[Of], .object[Of], .instanceOf, .shape。

propTypes: {
 array: React.PropTypes.array,
 arrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
 object: React.PropTypes.object,
 objectOf: React.PropTypes.objectOf(React.PropTypes.number),
 
 message: React.PropTypes.instanceOf(Message),
 
 object2: React.PropTypes.shape({
 color: React.PropTypes.string,
 size: React.PropTypes.number
 })
}

###自定义验证

提供你自己的函数

propTypes: {
 customProp: function (props, propName, componentName) {
 if (!/matchname/.test(props[propName])) {
 return new Error('Validation failed!');
 }
 }
}

##其他特性

###类集合

使用classname操作DOM class。之前都知道使用React.addons.classSet。查看Class set

var cx = require('classname');
render: function () {
 var classes = cx ({
 'message': true,
 'message-important': this.props.isImportant,
 'message-read': this.props.isRead
 });
 
 return <div className={classes}> Great Scott! </div>;
} 

###扩展属性

查看Transferring props

<VideoPlayer src="video.mp4" />
var VideoPlayer = React.createClass({
 render: function () {
 /* 将 src="..." 属性传递到它的子组件 */
 return <VideoEmbed {...this.props} controls='false' />;
 }
});

###Mixins

addons中查看内建mixins。

var SetIntervalMixin = {
 componentWillMount: function () {
 ...
 }
}
var TickTock = React.createClass({
 mixins: [SetIntervalMixin]
});

##顶级API

React.createClass({ ... })
React.isValidElement(c)
ReactDOM.findDOMNode(c) // 0.14+
ReactDOM.render(<Component />, domnode, [callback]) //0.14+
ReactDOM.unmountComponentAtNode(domnode) //0.14+
ReactDOMServer.renderToString(<Component />) //0.14+
ReactDOMServer.renderToStaticMarkup(<Component />) //0.14+

##JSX模式

###Style简写

查看内联样式

var style = {
 backgroundImage: 'url(xxx.jpg)',
 height: 10
};
return <div style={style}></div>;

###InnerHTML

查看dangerouslySetInnerHTML

function markdownify() {
 return "<p> ... </p>";
}
<div dangerouslySetInnerHTML={{__html: markdownify()}} />

###列表

var TodoList = React.createClass({
 render: function () {
 function item(itemText) {
 return <li>{itemText}</li>;
 }
 
 return <ul>{this.props.items.map(item)}</ul>;
 }
});

##可以查看

动画

About

React Cheatsheet

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /