Значение реагирующих пользовательских хуков не изменяется - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть следующая простая страница реакции с использованием хуков

https://codesandbox.io/embed/funny-resonance-2ijv4?fontsize=14&hidenavigation=1&theme=dark

, которую я извлек выбранное значение в отдельный компонент, чтобы к нему могли обращаться другие компоненты. В компоненте Header обновленное значение фактически обновляется, когда пользователь нажимает на ListGroup.Item, но оно обновляется дважды. что я не знаю, почему.

секунду, значение не обновляется в компоненте приложения. что я не так делаю?

1 Ответ

1 голос
/ 29 апреля 2020

В компоненте Header обновленное значение фактически обновляется, когда пользователь нажимает на ListGroup.Item, но оно обновляется дважды. что я не знаю почему.

Поместите console.log(selectedView); в эффект и попробуйте снова.

Значение не обновляется в компоненте приложения. Что я делаю не так?

Каждый компонент также получает свою собственную копию ловушки useView, он не имеет какого-либо "глобального" состояния.

Вы можете разоблачить * обработчик onViewChange для вашего компонента Header и использование эффекта для обработки обратного вызова с текущим выбранным представлением.

const Header = ({ onViewChange }) => {
  const [selectedView, setSelectedView] = useView();

  useEffect(() => {
    onViewChange(selectedView);
  }, [onViewChange, selectedView]);
  ...

Добавление какого-либо состояния в App и сохранение значения представления вызываемого возврата

function App() {
  const [selectedView, setSelectedView] = useState();

  useEffect(() => {
    // place console.log in effect so only logs once per update
    console.log(selectedView);
  }, [selectedView])

  return (
    <div className="App">
      <Container>
        <Row>
          <Col>
            <Logo />
            <Header onViewChange={setSelectedView} />
            {selectedView === VIEW.clients && <ClientsView />}
            {selectedView === VIEW.categories && <CategoriesView />}
          </Col>
        </Row>
      </Container>
    </div>
  );
}

Edit friendly-architecture-50puu

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