该符号实际上是目前提出的用于表示装饰器的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。