I don't know much about react, but now I have a simple API and want to receive data in different languages by selecting the language option in the special component.
LanguageSelect.js:
import React, { useState } from "react";
import { useLanguage } from "../context/Language";
import { Route, useHistory } from "react-router";
const LanguageSelector= () => {
const { language, setLanguage } = useLanguage();
const history = useHistory();
console.log(language);
return (
<Route
render={({ history }) => (
<select
value={language}
onChange={(event) => {
// ! reloads but forces value to default
// history.go(0);
// ! reloads but forces value to default
// let currentUrl = window.location.pathname;
// history.push(currentUrl);
// window.location.reload(false);
// ! reloads but forces value to default
// localStorage.setItem('langSelect', event.target.value);
// window.location.reload(false);
// setLanguage(localStorage.getItem('langSelect'));
// * works fine but redirect
history.push("/");
// *setting language
setLanguage(event.target.value);
}}
>
<option value="Rus">Русский</option>
<option value="Eng">English</option>
<option value="Fr">Français</option>
</select>
)}
/>
);
};
export default LanguageSelector;
./context.Lanuage.js:
import React, { createContext, useContext, useMemo, useState } from "react";
const LanguageContext = createContext();
const useLanguage = () => {
const [language, setLanguage] = useContext(LanguageContext);
return { language, setLanguage };
};
const LanguageProvider = (props) => {
const [language, setLanguage] = useState("Rus");
const value = useMemo(() => [language, setLanguage], [language]);
return <LanguageContext.Provider value={value} {...props} />;
};
export { LanguageProvider, useLanguage };
So, to get my fetch request in other components, I have to reload the page. And as you can see by the comments, the only way to receive data is by redirecting to the default location ("/") right after selecting the language. If I do all other things which are commented, the page simply reloads and sets the default select value