React / Redux Как установить значение из хранилища redux в состояние компонента - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно изменить полученные данные из хранилища redux на другую переменную (а затем изменить ее). На данный момент я получаю данные из магазина после вызова API, и они хранятся offices, но не установлены в мою переменную officeData. Кто-нибудь, как я могу это решить?
Это мой код:

  const dispatch = useDispatch();
  const offices = useSelector((state) => state.office.offices)
  const [officeData, setOffices] = useState(offices);
  debugger;
  useEffect(()=> {
    dispatch(getOffices());
    setOffices(offices);
    debugger
  }, [dispatch])

1 Ответ

0 голосов
/ 08 мая 2020

Если вы даже не вводите свой useEffect, я думаю, это потому, что вы указываете dispatch в качестве зависимости.

Эффект срабатывает при монтировании компонента, но также и при обновлении компонента (свойство или состояние). Итак, вы могли бы сделать что-то вроде этого:

import { useEffect } from "react";

const dispatch = useDispatch();
const offices = useSelector((state) => state.office.offices);
const [officeData, setOffices] = useState(undefined);
const [didMount, setDidmount] = useState(false);

// When component mount, load your Offices data
useEffect(() => {
  if(!didMount){
    dispatch(getOffices());
    setOffices(offices);
  } else {
    setDidmount(true);
  }
});

useEffect(() => {
  if(didMount) {
    // When you update officeData, do your thing
  }
}, [officeData]);

Я не знаю поведения useSelector, но думаю, он не запускает рендеринг. Возможно, вы могли бы использовать useEffect с офисами в качестве зависимости , только будьте осторожны, чтобы не l oop!

...