Reputation: 187
I have a dropdown component where a user selects an option. i am wondering if it's possible to update all components in the site when the user changes their selection. The initial code is below:
const Languages = () => {
const languages = [
{ value: "en", label: "EN" },
{ value: "sp", label: "SP" },
];
return (
<>
<select
value={languages.value}
onChange={(e) => {
window.localStorage.setItem('language', e.target.value);
setValue(e.target.value);
}}
>
<option>en</option>
<option>es</option>
</select>
<Translator
from='en'
to={window.localStorage.getItem('language')}
googleApiKey='xxx'
>
<p><Translate>Welcome!</Translate></p>
</Translator>
</>
);
};
I am create a language selection option for the site, and will need to wrap all static text in the component, so I am needing all of the Translator components to update the to={window.localStorage.getItem('language')}
when the user's selection changes.
How would I go about doing this?
Upvotes: 0
Views: 33
Reputation: 1588
check the code below:
const Languages = () => {
//this will be chosen language
const [value, setValue] = useState(null)
const languages = [
{ value: "en", label: "EN" },
{ value: "sp", label: "SP" }
]
useEffect(() => {
//set chosen language if it exists
setValue(window.localStorage.getItem("language"))
}, [])
return value?(
<>
<select
value={value}
onChange={(e) => {
window.localStorage.setItem("language", e.target.value)
setValue(e.target.value)
}}
>
{
languages.map((lang) => <option value={lang.value}>{lang.label}
</option>)
}
</select>
<Translator
from='en'
to={value}
googleApiKey='xxx'
>
<p><Translate>Welcome!</Translate></p>
</Translator>
</>
):null
}
Upvotes: 1