const Component = () => {
const useJustHere = () => {
useBrain()
}
useJustHere() // ~ok
return ...
}const useJustHere = () => {
useBrain()
}
const Component = () => {
useJustHere() // ok
return ...
}const Component = (props) => {
if(condition) {
useBrain(); // not ok
}
return ...
} т.к. condition может поменяться, а хуки всегда дожны бть вызваны по порядку, а то реакт не поймёт где какой хук.
const Component = (props) => {
useBrain(); // ok
const justHere = () => {
useBrain()
}
justHere() // ~ok
setTimeout((() => {
useBrain() // not ok
}, 1)
return <div onClick="justHere //not ok">...</div>
}
useSelector. useSelector снаружи и передавать в RegisterService уже полученные параметры. Либо вытащить глобальный redux и брать значения из него без всяких хуков.
use<some>), а потому может вызываться когда хочешь.// отрисовка компонента внутри React
globalCurrentState = globalCurrentStateMap.get(Component);
globalCurrentStateIndex = 0
Component(...arguments)
globalCurrentState = null
globalCurrentStateIndex = null
// хук useState
function useState(stateValue) {
// увеличиваем индекс хука относительно компонента на единицу
globalCurrentStateIndex++;
// получаем массив state для текущего вызова useState
let stateArray = globalCurrentState[globalCurrentStateIndex];
if (stateArray) { // если уже есть - просто возвращаем
return stateArray;
} else { // иначе
// создаём setValue
function setValue(newValue) {
stateArray[0] = newValue;
}
// создаём массим state
stateArray = [stateValue, setValue];
// записываем в глобальную переменную
globalCurrentState[globalCurrentStateIndex] = stateArray;
// отдаём
return stateArray;
}
}submitData будет вызван - все глобальные переменные уже десять раз будут переопределены другими компонентами.use<some>), то и сама функция становится хуком и не может работать вне корня компонента.

Object.create(null)). Например вместо newObject.hasOwnProperty('name') рекомендуется Object.hasOwn(newObject, 'name').
prefix: false\'_'\<что угодно но не use> в конфиге модуля.
div.innerHTML = ...; добавь: div.querySelectorAll('script').forEach((sourceScript) => {
const script = document.createElement('script');
for(const attribute of sourceScript.attributes)
script.attributes.setNamedItem(attribute.cloneNode(true));
script.innerHTML = sourceScript.innerHTML;
sourceScript.parentNode.replaceChild(script, sourceScript);
})