Задать вопрос

Reactjs плавный Render?

Добрый день!

Интересует вопрос, как возможно сделать переключение страниц плавным?
Использую ReactJs и JSX.

Все работает отлично, но при смене страницы, метод Render слишком резкий, просто меняет содержимое блока, хотелось бы чтобы он делал это более плавно, возможно с анимацией загрузки.

Подскажите в какую сторону копать или что можно использовать для плавного Render'а ?
  • Вопрос задан
  • 4117 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Merion Academy
    Frontend-разработка на React
    4 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
Ну тут у Reacta есть то что вам нужно, а именно ReactCSSTransitionGroup. При помощи этого аддончика можно анимировать смену контента, ну и если постараться немного, то и переходы по страницам.
Вот мой рабочий примерчик с использованием react-router:
import React from 'react/addons'
import Router, {Route, DefaultRoute, RouteHandler, Link} from 'react-router';
import RouterContainer from './services/RouterContainer';

const { CSSTransitionGroup } = React.addons;

class PageOne extends React.Component {
    render() {
        return (
            <div className="Image">
                <h1>Page 1</h1>
                <p>Тут контентик для первой страницы!</p>
            </div>
        )
    }
}

class PageTwo extends React.Component {
    render() {
        return (
            <div className="Image">
                <h1>Page 2</h1>
                <p>Тут контентик для второй страницы</p>
            </div>
        )
    }
}

class App extends React.Component {
    render() {
        var key = RouterContainer.getRoute();
        return (
            <div>
                <ul>
                    <li>
                        <Link to="/page1">Page 1</Link>
                    </li>
                    <li>
                        <Link to="/page2">Page 2</Link>
                    </li>
                </ul>
                <CSSTransitionGroup component="div" transitionName="example">
                    <RouteHandler key={key}/>
                </CSSTransitionGroup>
            </div>
        );
    }
}
//Create router config
var routes = (
    <Route handler={App} >
        <Route name="page1" handler={PageOne} />
        <Route name="page2" handler={PageTwo} />
    </Route>
);
var router = Router.create({routes});
RouterContainer.set(router);

(function (w, d, R) {
    router.run(function (Handler) {
        React.render(<Handler />, d.querySelector('#example'));
    });
}(window, document, React));

Ну и стили для перехода:
.Image {
  position: absolute;
  height: 400px;
  width: 400px;
}

.example-enter {
  opacity: 0.01;
  transition: opacity .5s ease-in;
}

.example-enter.example-enter-active {
  opacity: 1;
}

.example-leave {
  opacity: 1;
  transition: opacity .5s ease-in;
}

.example-leave.example-leave-active {
  opacity: 0;
}

.link-active {
  color: #bbbbbb;
  text-decoration: none;
}

Ну и соответственно использование без react-router будет еще проще. Анимацию для переходов вы можете в принципе прописать любую. Вот демочка для иллюстрации работы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽