Obecnie próbuję zbudować prostą aplikację reag-redux, która ma dane studentów i kampusu w backend. OnEnter pracował tutaj, ale nie istnieje w nowym routerze reagowania.React-Router v4 onEnter wymiany
Ta aplikacja próbuje wczytać dane początkowe na początku, zamiast robić element componentDidMount w każdym rzeczywistym komponencie. Czy jest to zalecane podejście, czy też istnieją alternatywne wzorce, o których nie wiem?
/* -------------------< COMPONENT >------------------- */
import React from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import Home from './components/Home';
import Students from './components/Students';
const Routes = ({ getInitialData }) => {
return (
<Router>
<div>
<Route exact path="/" component={Home} onEnter={getInitialData} />
<Route path="/students" component={Students} />
<Route path="*" component={Home} />
</div>
</Router>
);
};
/* -------------------< CONTAINER >-------------------- */
import { connect } from 'react-redux';
import receiveStudents from './reducers/student';
import receiveCampuses from './reducers/campus';
const mapState = null;
const mapDispatch = dispatch => ({
getInitialData:() => {
dispatch(receiveStudents());
dispatch(receiveCampuses());
}
});
export default connect(mapState, mapDispatch)(Routes);
Problem polega na tym, że jeśli 'getInitialData' jest asynchroniczny,' ' uczyni zanim to się robi pobierania. Nie narzekam, jest to wina implementacji v4. –
W moich aplikacjach używam niektórych flag, aby pokazać, że dane ładują się i sprawdzam je w komponencie. Podczas ładowania wyświetla się wskaźnik ładowania, więc nie jest tak źle dla mnie – akmed0zmey