Coś dziwnego się dzieje, czytałem dokumentację React, a oni rozmawiają o cyklu życia i o tym, jak możesz zrobić coś niedobrego przed wyrenderowaniem komponentu. Próbuję, ale wszystko, czego próbuję, nie działa, zawsze komponent sprawia, że renderowanie najpierw i po wywołaniu componenWillMount, ..didMount itd. I po wywołaniu tych funkcji, renderowanie dzieje się ponownie.Reactjs: Jak pobrać dane do załadowania przed zamontowaniem komponentu?
Najpierw muszę załadować dane, aby wypełnić stan, ponieważ nie chcę, aby stan początkowy był null
, chcę go z danymi od początkowego renderowania.
Używam Flux i Alt, tutaj jest akcja
@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});
})
}
}
wtedy sklep
@createStore(flux)
class GetDealersStore {
constructor() {
this.state = {
dealerData : null,
};
}
@bind(GetDealersActions.dealerDataSuccess)
dealerDataSuccess (data) {
this.setState({
dealerData : data,
});
}
}
i składnik
@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>
);
}
}
jak widać w części składowej mam ten
constructor (props) {
super(props);
this.state = {
modal : false,
dealerData : this.props.dealerData,
}
}
componentWillMount() {
GetDealersActions.getDealers();
this.setState({
dealerData : this.props.dealerData.dealersData,
})
}
który mówi mi, że dealerData is undefined
lub can not read property of null
.
Wszystko, czego potrzebuję, to znać technikę, w której mogę pobrać dane przed wystąpieniem początkowego renderowania. Tak więc mogę wypełnić state
i rozpocząć pracę z tymi danymi.
Powiązane pytanie: http://stackoverflow.com/q/30329418/1233251 –
@ E_net4 jest mój problem : 'Wywołuje się raz, zarówno na kliencie, jak i serwerze, bezpośrednio przed wystąpieniem początkowego renderowania. Jeśli wywołasz setState w tej metodzie, render() zobaczy zaktualizowany stan i zostanie wykonany tylko raz, pomimo zmiany stanu. ", Który wprawił mnie w zakłopotanie. – NietzscheProgrammer
@ E_net4 w moim kodzie dodałem już instrukcję warunkową i wszystko jak w tym pytaniu i nie działa. Zobacz mój kod, spróbuj mi pomóc, proszę. – NietzscheProgrammer