Size: a a a

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

2020 October 02

V

Vladimir in React — русскоговорящее сообщество
Vladimir
да не, форвард реф все таки для других задач, сейчас стал консолить просто ссылку и в ней все таки есть данные, но интересно то что если законсолить просто optionsRef.current, то в консоле видно див элемент с дочерними элементами, если же законсолить optionsRef.current.children , то элементов нет
вот, что я имею ввиду
источник

ii

ilia ivanik in React — русскоговорящее сообщество
ilia ivanik
по сути мне бы сделать просто, чтобы вот такое работало (самое примитивное):

const Component = (props) => {
 useEffect(() => {
   props.callback()
 }, [])
}
он ругается, что хочет , [PROPS]) в deps ... но props.callback() - запрашивает данные с сервера и закидывает новые пропсы в Component, так что если я напишу:

const Component = (props) => {
 useEffect(() => {
   props.callback()
 }, [props])
}

он вызовется - запросит данные с сервака - его пропсы обновятся - он снова запросит данные - и т.д. бесконечно
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Maximum update depth exceeded. случится)
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
ilia ivanik
он ругается, что хочет , [PROPS]) в deps ... но props.callback() - запрашивает данные с сервера и закидывает новые пропсы в Component, так что если я напишу:

const Component = (props) => {
 useEffect(() => {
   props.callback()
 }, [props])
}

он вызовется - запросит данные с сервака - его пропсы обновятся - он снова запросит данные - и т.д. бесконечно
const { callback } = props


useEffect(() => calllback(), [callback])
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
ilia ivanik
он ругается, что хочет , [PROPS]) в deps ... но props.callback() - запрашивает данные с сервера и закидывает новые пропсы в Component, так что если я напишу:

const Component = (props) => {
 useEffect(() => {
   props.callback()
 }, [props])
}

он вызовется - запросит данные с сервака - его пропсы обновятся - он снова запросит данные - и т.д. бесконечно
если этот useEffect должен выполнятся только на маунт, никаких зависимостей туда не надо пихать
источник

AS

Andrii Stepanov in React — русскоговорящее сообщество
Тебе точно там нужны абсолютно все пропсы?
источник

MK

Maxim Koylo in React — русскоговорящее сообщество
ilia ivanik
он ругается, что хочет , [PROPS]) в deps ... но props.callback() - запрашивает данные с сервера и закидывает новые пропсы в Component, так что если я напишу:

const Component = (props) => {
 useEffect(() => {
   props.callback()
 }, [props])
}

он вызовется - запросит данные с сервака - его пропсы обновятся - он снова запросит данные - и т.д. бесконечно
у props априори всегда новая ссылка
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
Dmitry Guzeev
если этот useEffect должен выполнятся только на маунт, никаких зависимостей туда не надо пихать
оно сохранит ссылку на первый коллбэк, который передастся через props на первый рендер
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Eugene Maltsev
const { callback } = props


useEffect(() => calllback(), [callback])
сейчас попробую
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Andrii Stepanov
Тебе точно там нужны абсолютно все пропсы?
да нет, мне только коллбэк надо из пропсов там
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Dmitry Guzeev
оно сохранит ссылку на первый коллбэк, который передастся через props на первый рендер
так я так и хочу, но он мне пишет: React Hook useEffect has missing dependencies: 'setProfile' and 'unsetProfile'.
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
можно этот варнинг выключить вот так:

useEffect(() => {
...
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
можно же просто колбэк добавить в deps, зачем вырубать его то?)
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
Eugene Maltsev
можно же просто колбэк добавить в deps, зачем вырубать его то?)
потому что ему надо только один раз запросить данные, насколько я понял
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
если надо при каждом изменении колбэка, то добавить колбэк в депсы [props.callback] а в родителе мемоизировать колбэк с помощью useCallback
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Dmitry Guzeev
потому что ему надо только один раз запросить данные, насколько я понял
ну я так понял, что если я правильно использую useCallback, то он и вызовет этот useEffect только 1 раз
источник

DG

Dmitry Guzeev in React — русскоговорящее сообщество
ilia ivanik
ну я так понял, что если я правильно использую useCallback, то он и вызовет этот useEffect только 1 раз
это возможно только если у тебя либо в колбэке не используется стейт, либо с дополнительным варнингом уже в useCallback (в иных случаях у тебя при изменении зависимостей useCallback также будет useEffect вызываться)
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Eugene Maltsev
const { callback } = props


useEffect(() => calllback(), [callback])
спасибо, кажется до меня дошло как правильно сделать useCallback ))
источник

ii

ilia ivanik in React — русскоговорящее сообщество
Dmitry Guzeev
это возможно только если у тебя либо в колбэке не используется стейт, либо с дополнительным варнингом уже в useCallback (в иных случаях у тебя при изменении зависимостей useCallback также будет useEffect вызываться)
да, все так. теперь, чтобы убрать варнинг из useCallback - я сделал:

const { callback_0, callback_1, callback_2 } = props
const doCallbacks = useCallback(() => {
 callback_0()
 callback_1()
 callback_2()
}, [callback_0, callback_1, callback_2])
 
useEffect(() => {
 doCallbacks()
}, [doCallbacks])

надеюсь все правильно ... во всяком случае варнинги исчезли и больше не происходит Maximum update depth exceeded ))
источник

AK

Aliaksandr Kazutsin in React — русскоговорящее сообщество
Ребята кто нибудь подскажет почему с использованием FileReader() при вставки картинки все жестко лагает пока не обнулишь..
источник