покажи github, youtube как прогресс на каждом изменении маршрута - PullRequest
0 голосов
/ 28 апреля 2019

Существует новая концепция разделения кода и асинхронной маршрутизации с использованием приостановки и ленивости, представленная самой реакцией. С этой концепцией, как мы можем показать индикатор выполнения в верхней части страницы, когда маршрут меняется. Я мог бы показать значок загрузки, текст и т. Д., Но не индикатор выполнения (от 0 до 100%). Вот как я это сделал

const About = lazyLoading(() => import("./components/About"), {
  fallback: <h1>Loading...</h1>
});
const Home = lazyLoading(() => import("./components/Home"), {
  fallback: <h1>Loading...</h1>
});

const BasicExample = () => {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
        </ul>

        <hr />

        <Route exact path="/" render={() => <Home name="hello" />} />
        <Route path="/about" component={About} />
      </div>
    </Router>
  );
};
render(<BasicExample />, document.getElementById("root"));

lazyloading.js

const lazyloading = (importFunc, { fallback = null }) => {
  const LazyComponent = lazy(importFunc);
  return props => (
    <Suspense fallback={fallback}>
      <LazyComponent {...props} />
    </Suspense>
  );
};

lazyloading.defaultProps = {
  fallback: null
};

export default lazyloading;

Вот пример в codeandbox, где у меня тоже есть компонент прогресса, но я не представлял, как его реализовать, когда использую приостановку и ленивый способ, которым я делаю

https://codesandbox.io/s/zw7mx97293jav

1 Ответ

1 голос
/ 28 апреля 2019

Вы можете просто использовать ProgressBar из react-topbar-progress-indicator. Вы никогда не сможете отобразить точный процент, так как разные компоненты принимают разные типы для рендеринга в зависимости от используемых побочных эффектов - вызова API, тайм-аута и т. Д., Но этот компонент отлично справляется с отображением индикатора выполнения.

1) Для компонента About я намеренно добавил тайм-аут 3 с, чтобы увидеть индикатор выполнения в действии.

2) Вы также можете настроить индикатор выполнения на другие цвета.

3) Кодовая ссылка рабочего образца.

import React from "react";
import ReactDOM from "react-dom";
import lazyLoading from "./LazyLoading";
import ProgressBar from "react-topbar-progress-indicator";
import { BrowserRouter as Router, Link, Route } from "react-router-dom";

const About = lazyLoading(
  () => {
    return new Promise(resolve => {
      setTimeout(() => resolve(import("./About")), 3000);
    });
  },
  {
    fallback: <ProgressBar />
  }
);

const Home = lazyLoading(() => import("./Home"), {
  fallback: <ProgressBar />
});

const BasicExample = () => {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
        </ul>

        <hr />

        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
      </div>
    </Router>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<BasicExample />, rootElement);

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...