Size: a a a

JavaScript.Ninja

2021 April 20

AK

Anton Kalodzich in JavaScript.Ninja
Если не учитывать случай, когда хранится не дом нода, в том случае все понятно
источник

YS

Yuri Strelets in JavaScript.Ninja
createRef будет пересоздаваться на каждом рендере
источник

AI

Arthur Irgashev in JavaScript.Ninja
да-да, вот и я об этом с самого начала говорю. собственно, тот вопрос с собеса именно для этого и нужен )
источник

AK

Anton Kalodzich in JavaScript.Ninja
Я про createRef говорил в контексте классов
источник

YS

Yuri Strelets in JavaScript.Ninja
ааа, тогда да
источник

YS

Yuri Strelets in JavaScript.Ninja
но в контексте классов useRef и не нужен
источник

AI

Arthur Irgashev in JavaScript.Ninja
useRef можно юзать и для хранения стейта в т.ч
источник

AI

Arthur Irgashev in JavaScript.Ninja
это позволяет тебе избавиться от проброса кучи зависимостей во всякие useEffect / useMemo
источник

AI

Arthur Irgashev in JavaScript.Ninja
и лишних перерендеров, даже если стейт изменится
источник

AK

Anton Kalodzich in JavaScript.Ninja
Тут просто говорилось, что тратится время на оборачивание в useRef, поэтому я сравнил useRef с createRef
источник

AK

Anton Kalodzich in JavaScript.Ninja
Да, я понял о чем речь
источник

YS

Yuri Strelets in JavaScript.Ninja
а как заставляете перерендерится компонент чтобы он подхватил этот "стейт"?
источник

AK

Anton Kalodzich in JavaScript.Ninja
У меня был кейс, когда нужен был стейт для анимаций на канвасе. Соответственно, чтобы реакт не ререндрил компонент, но анимации использовали актуальные данные, пришлось использовать useRef
источник

AI

Arthur Irgashev in JavaScript.Ninja
никак :)

для коллбеков это и не нужно. им главное получить доступ к актуальному стейту
а это делается вот так

const [state, change] = useState(); 
const stateRef = useRef();

useEffect(() => {stateRef.current = state;}, [state]);

const doSmth = useCallback(() => stateRef.current...., [])
источник

JD

Johnny Davis 🏴 in JavaScript.Ninja
Добрый вечер! Такой вопрос:

Какие самые типичные проекты можно сделать React.js разработчику 🤷‍♂️ чтобы привлечь внимание работодателя. Смотрел CV и githubs своих "конкурентов"/коллег и понимаю что мы и правда «кирпичи в одной кладке».
источник

AI

Arthur Irgashev in JavaScript.Ninja
а если нужно обновить именно стейт, то можно дёрнуть forceUpdate({})
источник

YS

Yuri Strelets in JavaScript.Ninja
да в рефе можно много чего полезного хранить ))
источник

AI

Arthur Irgashev in JavaScript.Ninja
const [_, forceUpdate] = useState({}); 
const stateRef = useRef({
 state: {},
 doSmth() {
  this.state = 'hello, world'
}
})

const changeValue = useCallback((value) => {
  stateRef.doSmth(value);
  forceUpdate()
})
источник

AI

Arthur Irgashev in JavaScript.Ninja
вот )
источник

AI

Arthur Irgashev in JavaScript.Ninja
но это такое, тоже применяется примерно 1 раз в 10 лет
источник