Я использую React Context, например this и действительно застрял в том, как обновить мой элемент видео (чтобы воспроизвести видео). Разве компоненты не должны обновляться автоматически при получении реквизита?
Вот упрощенная версия моего кода:
import React, { useState } from "react";
import ReactDOM from "react-dom";
import { Video } from "grommet";
import LanguageContext from "./language-context";
import LanguageSwitcher from "./LanguageSwitcher";
const App = () => {
const [language, setLanguage] = useState("en");
const value = { language, setLanguage };
console.log(language); // shows language on click
return (
<LanguageContext.Provider value={value}>
<h2>Current Language: {language}</h2>
<p>Click button to change to jp</p>
<div>
{/* Can be nested */}
<LanguageSwitcher />
<VideoWrapper>
<Video fit='cover' controls='over'>
<source key='video' src="example.mp4" type='video/mp4' poster="example.jpg"/>
<track
srcLang={language}
src='//v2.grommet.io/assets/small-en.vtt'
default={true}
/>
</Video>
</VideoWrapper>
</div>
</LanguageContext.Provider>
);
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
И (в моем случае очень вложенный) дочерний компонент
import React, { useContext } from "react";
import LanguageContext from "./language-context";
const LanguageSwitcher = () => {
const { language, setLanguage } = useContext(LanguageContext);
return (
// <Component1>
// <Component2>
// <Component3>
// <Component4>
// <Component5>
<button onClick={() => setLanguage("jp")}>
Switch Language (Current: {language})
</button>
// </Component5>
// </Component4>
// </Component3>
// </Component2>
// </Component1>
);
};
export default LanguageSwitcher;
язык-контекст.js
import React from "react";
// set the defaults
const LanguageContext = React.createContext({
language: "en",
setLanguage: () => {}
});
export default LanguageContext;
Пока все работает, язык можно прописать в консоли в корневом компоненте, но если я попытаюсь передать его как параметр видео, обновления не произойдет. Что сделать, чтобы видео запускалось после клика?