У меня есть сайт, построенный с React Stati c, в котором всегда присутствует компонент Header. В зависимости от того, имеет ли текущая страница компонент героя или нет, заголовок должен быть либо светлым, либо темным.
Заголовок отображается вне маршрутов, и useEffect
запускается до отображения дочерних элементов. Это , вероятно из-за маршрутизации.
Это текущий код:
// App.js
import React, { useState, useEffect } from 'react'
import { Root, Routes } from 'react-static'
export default () => {
const [useDarkTheme, setUseDarkTheme] = useState(false);
useEffect(() => {
if (typeof document !== "undefined") {
const heroPresent = document.querySelectorAll(".o-hero").length > 0;
console.log("The hero is present: " + heroPresent);
setUseDarkTheme(!heroPresent);
}
})
return (
<Root>
<React.Suspense fallback={ <em>Loading...</em> }>
<Header useDarkTheme={ useDarkTheme } />
<Routes default />
</React.Suspense>
</Root>
);
}
То, что будет отображаться на <Routes default />
, - это состояние c страниц. настроен в React Stati c static.config.js
.
Ниже приведен пример компонента Hero:
// Hero.js
import React from "react";
export default () => {
console.log("This is the Hero rendering. If this exist, the Header should be dark.");
return (
<div className="o-hero">
<p>Hero!</p>
</div>
);
}
Когда я запускаю приложение и смотрю журналы, вот что я получаю:
The hero is present: false
This is the Hero rendering. If this exist, the Header should be dark.
Как Могу ли я как-то обнаружить присутствие Героя из Заголовка, хотя Герой находится в маршрутизаторе, а Заголовок - нет? Это похоже на довольно распространенный вариант использования, но я не смог найти никакой информации о паутинах.
Заранее спасибо!