Примечание. Этот вопрос не о написании пользовательских хуков в React .
Недавние разработки в React позволяют нам создавать хуки, т.е.для состояния React, внутри такой простой функции, как:
function App () {
const [someVar, setSomeVar] = useState('someVarDefaultValue');
return (
<div
onClick={() => setSomeVar('newValue')}>{someVar}
</div>
);
}
Хук useState
возвращает массив с аксессором и мутатором, и мы используем их декомпозицией массива внутри нашей функции App.
Так что под капотом ловушка выглядит примерно так (просто псевдокод):
function useState(defaultValue) {
let value = defaultValue;
function setValue(val) {
value = val;
}
return [value, setValue];
}
Когда вы попробуете этот подход в JS, он не будет работать - значение, разложенное из массива, не будет обновляться, если вы используетеsetValue
где-то.Даже если вы используете value
как объект, а не примитив defaultValue
.
У меня вопрос, как работает механизм ловушек в JS?
Из того, что я видел в React исходный код он использует функцию редуктора и проверку типа с помощью Flow.Чтобы понять общую картину, мне сложно следовать коду.