У меня есть множество проектов. Каждый проект содержит несколько изображений. Перебирая этот массив, я отображаю каждое имя. Я назначил Link
каждому элементу навигации по пути, содержащему название проекта. Мое намерение состояло в том, чтобы получить это имя и затем отобразить изображения проекта, на который нажали.
Страница проекта также содержит кнопку следующего проекта - нажатие этой кнопки изменит путь. Вот как я получаю новый проект:
cart;
nextCart;
componentDidUpdate(prevProps, prevState, snapshot) {
const prevPathname = prevProps.location.pathname;
const pathname = this.props.location.pathname;
if (pathname !== prevPathname) {
this.getCarts();
}
}
getCarts = () => {
const name = this.props.match.params.name;
this.cart = this.props.carts.find(value => value.name === name);
const currentIndex = this.props.carts.findIndex(value => value.name === name);
const nextIndex = currentIndex < this.props.carts.length - 1 ? currentIndex + 1 : 0;
this.nextCart = this.props.carts[nextIndex];
};
Проблема в том, что даже если изображения меняются, это происходит после небольшой задержки после изменения пути. Есть ли лучший способ добиться такого поведения?
Другими словами, когда я нажимаю кнопку, чтобы изменить путь, происходит задержка, пока изображения старого проекта не исчезнут и будут заменены новыми.
Как изменить путь:
this.props.history.push('/project/' + this.nextCart.name);
Приложение. js
function App() {
...
return (
<div className="App">
<Router history={history}>
<ScrollToTop>
<Header/>
{projects ?
<div>
<Route path="/project/:name" component={() => <Project carts={projects}/>}/>
<Route path="/about" component={About}/>
<div className="hs">
<Route path={["/", "/project/:name"]} exact
component={() => <CartHolder carts={projects}/>}/>
</div>
<div className="hs-mobile">
<Route path="/" exact component={() => <CartHolderMobile carts={projects}/>}/>
</div>
</div>
: <div className="black-overlay"/>}
</ScrollToTop>
</Router>
</div>
)
}