Ответ 1
Символ @
на самом деле является выражением 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.