这个@
符号实际上是一个 JavaScript 表达式,目前被提议用来表示装饰器:
装饰器可以在设计时注释和修改类和属性。
下面是一个使用装饰器和不使用装饰器设置 Redux 的示例:
没有装饰器
import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
function mapStateToProps(state) {
return { todos: state.todos };
}
function mapDispatchToProps(dispatch) {
return { actions: bindActionCreators(actionCreators, dispatch) };
}
class MyApp extends React.Component {
// ...define your main app here
}
export default connect(mapStateToProps, mapDispatchToProps)(MyApp);
使用装饰器
import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
function mapStateToProps(state) {
return { todos: state.todos };
}
function mapDispatchToProps(dispatch) {
return { actions: bindActionCreators(actionCreators, dispatch) };
}
@connect(mapStateToProps, mapDispatchToProps)
export default class MyApp extends React.Component {
// ...define your main app here
}
上面两个例子是等价的,只是一个偏好问题。此外,装饰器语法还没有内置到任何 Javascript 运行时中,并且仍然是实验性的并且可能会发生变化。如果你想使用它,可以使用Babel。