Общий вопрос о создании нового экземпляра класса в функциональном компоненте React. Я использую тон. js для проекта и приведенных здесь примеров, но актуален для всего.
Между вариантами A и B, какой шаблон является правильным? B - это то, что обычно можно увидеть, но если A неверно, почему? Кажется неэффективным, что при использовании useEffect выполняется первый рендеринг, а затем создается экземпляр. Итак, ваш код полон channels.current && doSomething()
. Почему оно не может быть начальным значением useRef?
Если ссылка сохраняет свое значение после повторного рендеринга, необходимо ли использовать useEffect?
И если я хочу обновить значения (4,0) в какой-то момент, то вместо динамических значений c целесообразно создавать экземпляры класса в качестве начального значения useState, как в опции C?
A. В качестве useRef начальное значение
const channels = useRef({
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
});
B. используйтеEffect для запуска ref
const channels = useRef(null);
useEffect(() => {
channels.current = {
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
}
}, []);
C. Как использоватьState начальное значение
const [channels, setChannels] = useState({
channel01: new Tone.Channel(4, 0),
channel02: new Tone.Channel(4, 0),
channel03: new Tone.Channel(4, 0)
})