У меня есть приложение, использующее react-router-dom
.
// App.js
function App() {
return (
<SiteContextProvider>
<Switch>
<Route path="/player/:slug"><PlayerPage /></Route>
<Route default><NotFoundPage /></Route>
</Switch>
</SiteContextProvider>
);
}
Дочерний компонент PlayerPage устанавливает для SiteContext значение параметра slug
, переданного в URL-адресе.
// SiteContextProvider.js
export const SiteContext = React.createContext(null);
export function SiteContextProvider(props) {
const [value, setValue] = useState(null);
return <SiteContext.Provider value={{value, setValue}}>{props.children}</SiteContext.Provider>;
}
export function PlayerPage(props) {
const { slug } = useParams();
const { value, setValue } = useContext(SiteContext);
setValue(slug);
return <span>{value}</span>;
}
Проблема в том, что при загрузке PlayerPage
он вызывает setValue
, который устанавливает значение контекста, перезагружая PlayerPage
. Это вызывает бесконечный цикл и мой код дает сбой. Как сделать так, чтобы PlayerPage устанавливал значение контекста только один раз?