Скажем, у вас есть что-то вроде этого:
const MyComponent = (props) => {
const refA = React.useRef()
const refB = React.useRef()
const refC = React.useRef()
const [x, setX] = React.useState(true)
const [y, setY] = React.useState([])
return <div>...</div>
}
В псевдокоде, что это на самом деле делает, когда вызывается несколько раз? Делают ли они это в принципе?
- Знайте, что
MyComponent
вот-вот будет преобразовано из функции в виртуальное дерево. - Установите глобальную переменную, которая будет отслеживать каждый вызов хука
useX
в пределах одного процедурного фрейма. - Сохраните для этого экземпляра компонента выходные данные каждого из этих вызовов ловушек.
- В следующий раз, когда обработчики будут вызываться для этого идентификатора компонента, он получит карту последних возвращенных результатов из последних
useX
вызовов из этого компонента.
Я спрашиваю, потому что (а) кажется, что это можно сделать только с помощью какого-то трюка с глобальной переменной, и (б) соответствующий код довольно сложен и сложен для анализа.
Интересно, можно ли просто дать краткий обзор высокого уровня или какой-нибудь псевдокод о том, как React реализует эти волшебные хуки.
Кажется, это что-то вроде этого, хотя и более продвинутого:
let dispatcher = {}
function MyComponent() {
}
function begin() {
dispatcher.component = {
refs: [],
states: []
}
}
function useRef() {
let ref = {}
dispatcher.component.refs.push(ref)
return ref
}
function useState(val) {
let state = val
dispatcher.component.states.push(val)
return state
}
function end() {
dispatcher.component = null
}
Я просто не понимаю, как он может запоминать и тому подобное с помощью этой магии.
Это не то же самое, что узнать, как хуки узнают, для какого компонента они предназначены. Это только один аспект моего вопроса, я вообще спрашиваю, как работают хуки.