그리고 OOP/C# 사람이 React Hooks 뒤에 있는 메커니즘을 이해하려고 해요.
9062 단어 reacthooksjavascript
React 갈고리의 단순성 뒤에 있는 마력은 무엇입니까?
OOP/MVVM/C#의 배경에서부터 반응을 하기 시작했는데 한동안 리액트 훅스에 대해'장면 뒤의 작업 원리'증후군이 생겼어요.
간단하고 무상태로 보이는 자바스크립트 함수에서 호출될 때 갈고리는 상태를 유지합니다.
특히 같은 함수 구성 요소에 같은 종류의 갈고리가 공존하는 방법과 여러 렌더링에서 상태를 유지하는 방법에 대해 설명합니다.
예를 들어, 다음 함수
MyComponent
의 여러 호출에서function MyComponent() {
const refUp = useRef(0);
const refDown = useRef(0);
const [countUp, setCountUp] = useState(0);
const [countDown, setCountDown] = useState(0);
const clicked = () => {
setCountUp(count => count + 1);
setCountDown(count => count - 1);
};
console.log("rendering");
return (
<p>
<span>Up: {refUp.current++}</span><br/>
<span>Down: {refDown.current--}</span><br/>
<span>Counts: {countUp}, {countDown}</span><br/>
<button onClick={clicked}>Count</button>
</p>
);
}
refA.current
와refB.current
어떻게 자바스크립트this
같은 것에 의존하지 않는 상황에서 변이가 발생하고 여러 개의 렌더링에 여전히 존재하며 그들의 값을 유지할 수 있습니까?특히 두 개의 같은 호출
useRef(0)
을 통해 만들어진 것을 감안하면?나의 직감은 나에게 유일한 명칭 매개 변수, 예를 들면 useRef(0, "refA")
가 있어야 한다고 말했지만, 실제로는 없었다.같은 문제도 이러한 변수를 초기화하는
countUp
,countDown
와 상응하는 useState(0)
호출에 적용된다.try it in the CodePen
반드시 어떤 것이 우리의 상태를 유지해야 한다.
모든 갈고리는 반드시 어떤 1:1의 반사가 있어야만 그 상태로 들어갈 수 있다.
그것이 움직일 때 마법이 없다.요컨대, 다음은 내가 그것에 대한 이해이다.
MyComponent
와 같은 모든 구성 요소는 React의 정적 상태에서 하나의 전용 항목을 가지고 이 항목은 렌더링 사이에서 구성 요소가 사용하는 모든 갈고리의 상태를 유지한다.useRef
를 호출할 때 React는 호출된 구성 요소 (현재 렌더링 중인 구성 요소) 를 알고 있기 때문에 React는 이전에 비추고 정적 속에 저장된 단일 구성 요소의 상태 항목을 검색할 수 있습니다.이것은 각 구성 요소의 갈고리useRef
와 useState
의 현재 값을 저장하는 곳이다.useRef
나 useState
등 호출의 정확한 순서는 매우 중요하기 때문에 후속 렌더링에서는 변하지 않아야 한다.우리의 예에서 React는 처음에 useRef
에 내부 상태MyComponent
의 두 항목을 만들고 useState
에 두 항목을 만들었다.MyComponent
))될 때 React는 정확한 상태에 접근하는 방법을 알고 각useRef
또는 useState
의 호출 순서에 따라 어떤 값을 되돌려줍니다.따라서, 만약 우리가 여러 개의 렌더링 중에 이 순서를 어지럽힌다면, 우리의 상태는 원시 인덱스가 정확하지 않기 때문에 파괴될 것이다.예를 들어 아래의 허구의 예는 곧
refUp
와 refDown
의 상태를 어지럽힐 수 있다. 왜냐하면 그들의 useRef
호출 순서가 일치하지 않기 때문이다.
// don't mess up the order of hooks like this:
let refUp;
let refDown;
if (Date.now() & 1) {
refUp = useRef(0);
refDown = useRef(0);
}
else {
refDown = useRef(0);
refUp = useRef(0);
}
render()
방법을 지원할 수 있지만 React의 이념은 상태를 클래스this.state
에 보존하고 클래스 구성 요소를 업데이트하는 것이다.다음 자료는 이러한 갈고리 메커니즘을 이해하는 데 큰 도움을 주었다.
Reference
이 문제에 관하여(그리고 OOP/C# 사람이 React Hooks 뒤에 있는 메커니즘을 이해하려고 해요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/noseratio/yet-another-oop-c-person-me-trying-to-understand-react-hooks-4aik텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)