родитель должен сделать ?
Под данными я имею ввиду не только данных состояние потомка, но еще и методы которые меняют состояние потомка
У потомка есть
const [count, setCount] = useState(0)
То есть получить не только count, но и извлечь setCount тоже
Я буду находясь в родителе дергать setCount потомка, удаленно буду менять состояние потомка ЕГО же методом
Я нашел два способа
1) Поднять состояние, передать event функцию потомку и начать его подслушивать в родителе, потом тригерить этот эвент и передавать через параметры все нужные данные и методы. Родитель получает и все готово. Единственное что я заметил, родитель должен у себя сохранить эти полученные данные. Подходят для этого рефы. И еще надо обернуть в usecallback event функцию, а то функция каждый раз будет новой и много раз будет передаваться выше. А мне достаточно одного раза, поэтому надо закешировать event functon
2) Второй способ это сделать ref указатель на потомок. И через этот реф указатель можно получить доступ ко всему внутреннему потомка
Оба способа работают.
Вопрос какой вариант лучше ??
Сталкиваетесь ли вы часто с такой ситуацией, когда родитель должен получить доступ к инкапсулированному потомку и извлечь оттуда то что ему нужно
всегда юзал колбек, поменьше рефов стараюсь
1 вариант, можете погуглить lifting state что бы почитать и не стоит пихать везде useCallback
локальное состояние потомка подними в родителя, а потомку передай просто значение и функцию изменения состояния, так лучше будет, если я конечно правильно понял проблему
под колбеком имеете ввиду обычное поднятие состояние ??
ну да, функцию прокидываю в ребенка и кладу в нее забираемое значение
useCallback по моему тут идеально подходит. Нет ?? если useCallback не юзать, родительский колбек одна и та же функция будет много раз пересоздаваться и постоянно будет дергать из потомка данные, даже не данные, а методы потомка, а они как правило не меняются. setCount потомка - один и тот же при создании. В данном контексте достаточно лишь один раз дернуть. Больше не надо. Согласны ?
Обсуждают сегодня