React Context - это нормально, чтобы напрямую изменить контекст провайдера от потребителя? - PullRequest
0 голосов
/ 30 января 2020

В этой 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. человек в потребителе, как показано выше? Код работает нормально, но я просто хочу убедиться, что это нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...