Ho un modulo React
che funziona correttamente in ES5
. Lo sto convertendo in ES6
e usando 6to5
per la conversione. Tutto traspone bene, ma ottengo un errore di runtime quando sto cercando di impostare il mio props
. Quando rilascio uno debugger
e guardo allo this
, vedo che lo this
è lo EventEmitter
e non la classe. Qui è il mio codice:Come risolvere `questo` nella conversione del modulo React nella classe ES6
var React = require('react');
import CalendarStore from './../stores/calendar.store.js';
function getAppointments() {
return {appts: CalendarStore.getAppts()}
}
export default class extends React.Component{
constructor(props) {
super(props);
this.props = {
view: 'weeks'
}
}
changeView(child, view) {
this.setProps({view: view});
}
componentWillMount() {
CalendarStore.addChangeListener(this._onChange);
}
_onChange() {
this.setProps(getAppointments());
}
....
};
Il posto che sto avendo il problema è nella mia funzione changeView
. Quando è transpiled
giù sembra che questo:
_onChange: {
value: function _onChange() {
this.setProps(getAppointments());
},
writable: true,
configurable: true
}
Anche in questo caso, all'interno di quella funzione, this
è il mio EventEmitter
. Qual è il modo di risolvere questo problema?
Puoi mostrarmi un blog o da qualche parte che spiega come i negozi dovrebbero essere gestiti da mixin? – jhamm
La maggior parte delle implementazioni di flusso ne fornisce una. Il mixin gestisce lo stato iniziale dal negozio, ascolta il negozio e fa this.setState quando c'è un cambiamento. Pulisce anche il listener quando il componente è smontato. Ecco un esempio di [fluxxor store mixin] (http://fluxxor.com/documentation/store-watch-mixin.html) – FakeRainBrigand
@FakeRainBrigand cosa succede se uso anche il flusso e imposta un valore predefinito come questo? '_handleStoreChange = (stato: Object = {}) => {..}' Ricevo un errore di sintassi con babel 'Assegnazione a rvalue' – tsm