Я использую новый файл _app.js
для Next.js, чтобы попытаться создать переход страницы, такой как постепенное исчезновение или слайд, но не могу обойти это.Я использую Styled Components, чтобы применить стиль.Моя структура выглядит следующим образом:
_app.js
import App, { Container } from 'next/app';
import React from 'react';
import PageTransition from '../components/PageTransition';
class MyApp extends App {
static async getInitialProps({ Component, ctx }) {
let pageProps = {};
if (Component.getInitialProps) {
pageProps = await Component.getInitialProps(ctx);
}
return { pageProps };
}
render() {
const { Component, pageProps } = this.props;
return (
<Container>
<PageTransition>
<Component {...pageProps} />
</PageTransition>
</Container>
);
}
}
export default MyApp;
компонентов / PageTransition / index.jsx
import { Transition } from 'react-transition-group';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Root from './index.style';
class PageTransition extends Component {
state = {
active: true,
}
componentDidUpdate() {
// Check if children are different to previous children
// If true, set this.state.active to false
// After 1000ms transition, set to true again
}
render() {
const { children } = this.props;
const { active } = this.state;
return (
<Transition in timeout={1000}>
<Root id="root" active={active}>
{children}
</Root>
</Transition>
);
}
}
export default PageTransition;
компоненты / PageTransition / index.style.js
import styled from 'styled-components';
const Root = styled.div`
opacity: ${p => (p.active ? 1 : 0)};
transition: opacity 1000ms;
`;
export default Root;
Это будет правильный подход?Если так, я не думаю, что componentDidUpdate достаточно скоро, чтобы поймать изменение страницы.Я пытаюсь выполнить эту работу, но она выполняет рендеринг, и вы видите вспышку страницы перед тем, как состояние обновляется снова, чтобы сообщить ей, что нужно начинать постепенное исчезновение, а затем исчезать. Мне нужно обновить состояние перед визуализацией.
Есть ли способ справиться с этим с помощью React Transition Group?Я посмотрел next-page-transitions , но мне было неудобно, что пакет имеет низкое использование, и я просто хотел более простое решение.