Sta succedendo qualcosa di strano, ho letto i documenti di React e loro parlano del ciclo di vita e di come si può fare qualcosa prima che il componente venga reso. Ci sto provando, ma tutto quello che provo è fallito, sempre il componente effettua il rendering prima e dopo chiama componentenWillMount, ..didMount, ecc. E dopo il richiamo di quelle funzioni, il rendering avviene di nuovo.Reactjs: come recuperare i dati da caricare prima che il componente sia montato?
Ho bisogno di caricare i dati prima per riempire lo stato perché non voglio che lo stato iniziale sia null
, lo voglio con i dati dal rendering iniziale.
Sto usando Flux e Alt, qui è l'azione
@createActions(flux)
class GetDealersActions {
constructor() {
this.generateActions('dealerDataSuccess', 'dealerDataFail');
}
getDealers (data) {
const that = this;
that.dispatch();
axios.get(`${API_ENDPOINT}/get-dealers/get-dealers`)
.then(function success (response) {
console.log('success GetDealersActions');
that.actions.dealerDataSuccess({...response.data});
})
}
}
poi il negozio
@createStore(flux)
class GetDealersStore {
constructor() {
this.state = {
dealerData : null,
};
}
@bind(GetDealersActions.dealerDataSuccess)
dealerDataSuccess (data) {
this.setState({
dealerData : data,
});
}
}
e la componente
@connectToStores
export default class Dealers extends Component {
static propTypes = {
title : React.PropTypes.func,
}
static contextTypes = {
router : React.PropTypes.func,
}
constructor (props) {
super(props);
this.state = {
modal : false,
dealerData : this.props.dealerData,
}
}
componentWillMount() {
GetDealersActions.getDealers();
this.setState({
dealerData : this.props.dealerData.dealersData,
})
}
static getStores() {
return [ GetDealersStore ];
}
static getPropsFromStores() {
return {
...GetDealersStore.getState(),
}
}
render() {
return (<div>
<div style={Styles.mainCont}>
{!!this.props.dealerData ?
this.props.dealerData.dealersData.map((dealer) => {
return (<div>HERE I AM RENDERING WHAT I NEED</div>);
}) : <p>Loading . . .</p>
}
</div>
</div>
);
}
}
come si può vedere nella componente ho questo
constructor (props) {
super(props);
this.state = {
modal : false,
dealerData : this.props.dealerData,
}
}
componentWillMount() {
GetDealersActions.getDealers();
this.setState({
dealerData : this.props.dealerData.dealersData,
})
}
che mi sta dicendo che dealerData is undefined
o can not read property of null
.
Tutto ciò di cui ho bisogno è conoscere una tecnica in cui posso recuperare i dati prima che si verifichi il rendering iniziale. Così posso compilare il state
e iniziare a lavorare con quei dati.
Una questione collegata: http://stackoverflow.com/q/30329418/1233251 –
@ E_net4 c'è il mio problema : 'Invocato una volta, sia sul client che sul server, immediatamente prima del rendering iniziale. Se chiami setState con questo metodo, render() vedrà lo stato aggiornato e verrà eseguito solo una volta, nonostante il cambiamento di stato. "Questo mi ha confuso. – NietzscheProgrammer
@ E_net4 nel mio codice Ho già aggiunto un'istruzione condizionale e tutto come in quella domanda e non funziona. Guarda il mio codice, cerca di aiutarmi, per favore. – NietzscheProgrammer