import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
В приведенном выше примере, когда вызывается setCount(count + 1)
, происходит повторный рендеринг. Мне любопытно узнать поток.
Я пытался заглянуть в исходный код. Я не смог найти ссылку на useState
или другие хуки на github.com / facebook / реаги .
Я установил react@next
через npm i react@next
и нашел следующее в node_modules/react/cjs/react.development.js
function useState(initialState) {
var dispatcher = resolveDispatcher();
return dispatcher.useState(initialState);
}
Возвращаясь к dispatcher.useState()
, я смог найти только следующее ...
function resolveDispatcher() {
var dispatcher = ReactCurrentOwner.currentDispatcher;
!(dispatcher !== null) ? invariant(false, 'Hooks can only be called inside the body of a function component.') : void 0;
return dispatcher;
}
var ReactCurrentOwner = {
/**
* @internal
* @type {ReactComponent}
*/
current: null,
currentDispatcher: null
};
Интересно, где найти реализацию dispatcher.useState()
и узнать, как она запускает повторный рендеринг при вызове setState
setCount
.
Любой указатель будет полезен.
Спасибо!