В этой Code Sandbox у меня есть провайдер, который инициализирует и передает контекст в приложение
const appContext = {
person: "Larry"
};
render(
<BrowserRouter>
<AppContext.Provider value={appContext}>
<App />
</AppContext.Provider>
</BrowserRouter>,
document.getElementById("root")
);
И в App есть потребитель, который изменяет контекст в зависимости от его состояния. Это происходит так, когда пользователь щелкает по другой ссылке и возвращается, состояние (в данном случае выбранное раскрывающееся меню) можно восстановить из контекста.
const Consumer = props => {
const [dropdownOpen, setOpen] = useState(false);
const appContext = useContext(AppContext);
const toggle = () => setOpen(!dropdownOpen);
const changePerson = e => {
appContext.person = e.currentTarget.textContent;
};
const people = ["Moe", "Larry", "Curly"];
return (
<ButtonDropdown isOpen={dropdownOpen} toggle={toggle}>
<DropdownToggle caret>{appContext.person}</DropdownToggle>
<DropdownMenu>
{people.map((p, idx) => {
return (
<DropdownItem
key={idx}
active={appContext.person === p}
onClick={changePerson}
>
{p}
</DropdownItem>
);
})}
</DropdownMenu>
</ButtonDropdown>
);
};
Безопасно ли напрямую обновлять appContext. человек в потребителе, как показано выше? Код работает нормально, но я просто хочу убедиться, что это нормально.