У меня была похожая проблема. Это не проблема с SSR, но с условным рендерингом в вашем JSX, где условие на сервере и клиенте отличается.
В моем случае я отрисовал что-то на основе условия, прочитанного из localStorage
, которое было определено только на клиенте. На сервере он возвратил undefined
, поэтому то, что было отображено на клиенте и на сервере, не совпадало.
Решением в моем случае было условное рендеринг на основе того, был ли компонент отрисован на клиенте.
Я написал следующий пользовательский хук:
import {useEffect, useState} from "react";
export const useLoaded = () => {
const [loaded, setLoaded] = useState(false);
useEffect(() => setLoaded(true), []);
return loaded;
};
Я использую это так:
// in the functional component's body
const loaded = useLoaded();
// in the JSX
{localCondition && loaded &&
<MyComponent />
}
С компонентами класса вы будете использовать метод жизненного цикла componentDidMount
и взамен setState
.