El @
símbolo es, de hecho, una expresión de JavaScript actualmente propuesta para significar decoradores :
Los decoradores permiten anotar y modificar clases y propiedades en tiempo de diseño.
Aquí hay un ejemplo de cómo configurar Redux sin y con un decorador:
Sin un decorador
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);
Usando un decorador
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
}
Ambos ejemplos anteriores son equivalentes, es solo una cuestión de preferencia. Además, la sintaxis del decorador aún no está integrada en ningún tiempo de ejecución de Javascript, y aún es experimental y está sujeta a cambios. Si desea usarlo, está disponible con Babel .