Il @
simbolo è in realtà un'espressione JavaScript currently proposed to signify decorators:
decoratori permettono di annotare e modificare le classi e le proprietà in fase di progettazione.
Ecco un esempio di impostazione Redux senza e con un decoratore:
Senza decoratore
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);
Utilizzando un decoratore
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
}
Entrambi gli esempi sopra sono equivalenti, è solo un ma di preferenza. Inoltre, la sintassi del decoratore non è ancora incorporata in un runtime Javascript, ed è ancora sperimentale e soggetta a modifiche. Se si desidera utilizzarlo, è disponibile utilizzando Babel.
fonte
2015-09-20 04:56:50
Non ho dimestichezza con Redux, ma sembra un decoratore. https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841 – Lee
Mi piace come in questo nuovo mondo JavaScript tu stia fissando il codice per metà del tempo e pensando "quale parte della sintassi del linguaggio è questa? " –
Lol, sono molto in profondità e ora lo sono. Ma all'epoca non sapevo che la sintassi del decoratore non avesse nulla a che fare con il redux. È solo JavaScript. Felice di vedere questa domanda sta aiutando molte persone come me. :) –