React useSSR Хук

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим использование хука useSSR в React. Этот хук позволяет проверить, выполняется ли наш код в браузере или на сервере, и предоставляет дополнительную информацию о среде, такой как доступность воркеров, слушателей событий и viewport. В конце этого практического занятия вы будете лучше понимать, как писать код React, оптимизированный для различных сред.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react(("React")) -.-> react/PerformanceOptimizationGroup(["Performance Optimization"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/conditional_render("Conditional Rendering") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") react/PerformanceOptimizationGroup -.-> react/memoization("Memoization with useMemo") subgraph Lab Skills react/jsx -.-> lab-38410{{"React useSSR Хук"}} react/conditional_render -.-> lab-38410{{"React useSSR Хук"}} react/hooks -.-> lab-38410{{"React useSSR Хук"}} react/use_state_reducer -.-> lab-38410{{"React useSSR Хук"}} react/memoization -.-> lab-38410{{"React useSSR Хук"}} end

Хук React useSSR

В ВМ уже предоставлены index.html и script.js. В общем, вам нужно только добавить код в script.js и style.css.

Для проверки, выполняется ли код в браузере или на сервере, создайте пользовательский хук, который использует typeof, Window, Window.document и Document.createElement() для определения доступности DOM. Используйте хук useState() для определения переменной состояния inBrowser и хук useEffect() для ее обновления и очистки в конце. Используйте хук useMemo() для мемоизации возвращаемых значений пользовательского хука.

Вот код:

const isDOMavailable = !!(
  typeof window !== "undefined" &&
  window.document &&
  window.document.createElement
);

const useSSR = () => {
  const [inBrowser, setInBrowser] = React.useState(isDOMavailable);

  React.useEffect(() => {
    setInBrowser(isDOMavailable);
    return () => {
      setInBrowser(false);
    };
  }, []);

  const useSSRObject = React.useMemo(
    () => ({
      isBrowser: inBrowser,
      isServer: !inBrowser,
      canUseWorkers: typeof Worker !== "undefined",
      canUseEventListeners: inBrowser && !!window.addEventListener,
      canUseViewport: inBrowser && !!window.screen
    }),
    [inBrowser]
  );

  return useSSRObject;
};

const SSRChecker = (props) => {
  const { isBrowser, isServer } = useSSR();

  return (
    <p>{isBrowser ? "Запускается в браузере" : "Запускается на сервере"}</p>
  );
};

ReactDOM.createRoot(document.getElementById("root")).render(<SSRChecker />);

Пожалуйста, нажмите кнопку "Go Live" в нижнем правом углу, чтобы запустить веб-сервис на порту 8080. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб-страницу.

Резюме

Поздравляем! Вы завершили практическое занятие по React хук useSSR. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.

OSZAR »