Size: a a a

React — русскоговорящее сообщество

2021 March 15

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Max Zhukov
Привет всем, столкнулся с проблемой и вообще не понимаю в чем причина. У меня есть стэйт редакса в который я кладу данные из запроса - invoices
На странице я хочу показать в консоли данные

useEffect(() => {
 console.log(invoices)
}, [invoices])

И консоль отрабатывает только один раз с undefined, но если я вынесу консоль лог из useEffect, то она отработает и тогда когда появится массив вместо undefined, не могу понять в чем проблема
Код покажи лучше
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Max Zhukov
Привет всем, столкнулся с проблемой и вообще не понимаю в чем причина. У меня есть стэйт редакса в который я кладу данные из запроса - invoices
На странице я хочу показать в консоли данные

useEffect(() => {
 console.log(invoices)
}, [invoices])

И консоль отрабатывает только один раз с undefined, но если я вынесу консоль лог из useEffect, то она отработает и тогда когда появится массив вместо undefined, не могу понять в чем проблема
может быть вы мутируете стейт? Без кода не понять
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Александр Шелист
может быть вы мутируете стейт? Без кода не понять
Тогда бы не было 2 рендера по идее
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Тимофей 🛴
Тогда бы не было 2 рендера по идее
Так может рендеры приходят еще откуда-то
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Александр Шелист
Так может рендеры приходят еще откуда-то
Да, точно
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Александр Шелист
Так может рендеры приходят еще откуда-то
Но смутировать из undefined во что то нельзя, так что эффект бы срабатывал
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Тимофей 🛴
Но смутировать из undefined во что то нельзя, так что эффект бы срабатывал
логично. Тогда действительно странно и интересно даже
источник

MZ

Max Zhukov in React — русскоговорящее сообщество
```
interface CustomProps {
t: any,
invoices?: any
}

function PendingList({t, invoices}:CustomProps) {
const dispatch = useDispatch()

useEffect(() => {
 dispatch(getInvoices(4, 0))
}, [dispatch])

useEffect(() => {
 
consoleconsole.log(invoices)
}, [invoices])


return(
 <div className="dashboard">
 
 </div>
)
}

const mapStateToProps = (state:RootState) => {
return {
 invoices: state.invoices.invoices.data
}
}

export default
connectconnect(mapStateToProps, null)(PendingList)
```
источник

MZ

Max Zhukov in React — русскоговорящее сообщество
Я уже пробовал перезапускать редактор даже
источник

И

Илья in React — русскоговорящее сообщество
Max Zhukov
Я уже пробовал перезапускать редактор даже
А он то причем?
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Max Zhukov
```
interface CustomProps {
t: any,
invoices?: any
}

function PendingList({t, invoices}:CustomProps) {
const dispatch = useDispatch()

useEffect(() => {
 dispatch(getInvoices(4, 0))
}, [dispatch])

useEffect(() => {
 
consoleconsole.log(invoices)
}, [invoices])


return(
 <div className="dashboard">
 
 </div>
)
}

const mapStateToProps = (state:RootState) => {
return {
 invoices: state.invoices.invoices.data
}
}

export default
connectconnect(mapStateToProps, null)(PendingList)
```
Замени connect на useSelector
Ну и редьюсер покажи, на всякий
источник

MZ

Max Zhukov in React — русскоговорящее сообщество
Я нашел проблему но все равно не догоняю что за ней стот
Если я убираю эту строчки то все отрабатывает как нужно
```
{invoices && !invoices.length ? (
<EmptyTableState style={{height:"400px"}} t={t} />
) : (

      <Table data={invoices} />
)
```

Я сделал это не правильно?
источник

СЛ

Станислав Лахман... in React — русскоговорящее сообщество
Прошу совета. Диспатчу экшн в useEffect, получаю стейт и передаю в List. В браузере  перехожу по роуту на другую тсраницу, позвращаюсь обратно в Shop и опять useEffect запускает экшн и диспатчит эще раз и у меня дублируются елементы на странице. Как правильно избежать этого?
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Станислав Лахман
Прошу совета. Диспатчу экшн в useEffect, получаю стейт и передаю в List. В браузере  перехожу по роуту на другую тсраницу, позвращаюсь обратно в Shop и опять useEffect запускает экшн и диспатчит эще раз и у меня дублируются елементы на странице. Как правильно избежать этого?
а что это за await dispatch()?
источник

СЛ

Станислав Лахман... in React — русскоговорящее сообщество
Александр Шелист
а что это за await dispatch()?
в какой-то статье увидел что так дисптчат, думал так правильно, но ничего не поменялось
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Станислав Лахман
Прошу совета. Диспатчу экшн в useEffect, получаю стейт и передаю в List. В браузере  перехожу по роуту на другую тсраницу, позвращаюсь обратно в Shop и опять useEffect запускает экшн и диспатчит эще раз и у меня дублируются елементы на странице. Как правильно избежать этого?
и зачем в зависимостях [dispatch] ?
источник

Т

Тимофей 🛴 in React — русскоговорящее сообщество
Александр Шелист
а что это за await dispatch()?
dispatch возвращает то что в него передано, если это thunk то он вернет promise
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Александр Шелист
и зачем в зависимостях [dispatch] ?
потому что так правильно
источник

АШ

Александр Шелист... in React — русскоговорящее сообщество
Тимофей 🛴
dispatch возвращает то что в него передано, если это thunk то он вернет promise
ну в текущем то примере все что возвращает диспатч игнорируется
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Тимофей 🛴
dispatch возвращает то что в него передано, если это thunk то он вернет promise
Я видел, как люди делали await ожидая, что дальше в коде будет уже обновленная версия состояния
источник