모듈 수준에서 블록 범위 변수 사용
나는 이것이 일반적으로 사실이라고 생각하고 다른 개발자의 경우에는 확실히 사실이었습니다(이 경우
useState
를 사용했어야 했습니다). 그러나 나는 그것이 전 세계적으로 사실인지 스스로에게 묻게 되었습니다. 일반적으로 React 구성 요소의 모듈 수준에서 블록 범위 변수를 사용하는 것은 안티 패턴입니까?예
내가 말하는 내용을 보여주기 위해 다음 코드를 상상해 보십시오.
// MyComponent.js
import React, { useState } from "react";
let blockScopedVal = 0;
export default () => {
const [myVal, setMyVal] = useState(0);
return (
<div>
<button onClick={() => blockScopedVal ++)}>blockScopedVal: {blockScopedVal}</button>
<button onClick={() => setMyVal((old) => old + 1)}>myVal: {myVal}</button>
</div>
);
};
이 코드에는 두 가지 기본 의미가 있습니다.
첫째, 첫 번째 버튼을 클릭해도 마치
useRef
를 사용한 것처럼 구성 요소가 다시 렌더링되지 않습니다.예를 들어 첫 번째 버튼을 10번 클릭하면 UI에서 아무 변화도 느끼지 못하지만 두 번째 버튼을 클릭하면 첫 번째 버튼의 표시된 값이 10으로 점프하고 두 번째 버튼의 표시된 값이 1.
둘째, 둘 이상의
<MyComponent />
가 있는 경우 배후에서 변수blockScopedVal
를 공유합니다.예를 들어 두 개의
MyComponent
s가 있다고 가정합니다. MyComponent
의 첫 번째 버튼(blockScopeVal 증분기)을 10번 클릭하면 UI에서 아무 변화도 느끼지 못하지만 두 번째 버튼을 클릭하면 첫 번째 버튼의 표시된 값이 10으로 이동하고 두 번째 버튼의 표시된 값은 1로 올바르게 증가합니다. 두 번째 값MyComponent
은 여전히 "blockScopedVal: 0""myVal: 0"에 있습니다. 하지만 두 번째 MyComponent
의 두 번째 버튼을 클릭하면 "blockScopedVal: 10""myVal: 1"이 됩니다. blockScopedVal
의 값은 두 인스턴스 간에 공유됩니다.여기에서 블록 범위 변수를 사용하는 것과
useRef
를 사용하는 것이 크게 다릅니다.질문
React 구성 요소 모듈에서 블록 범위 변수를 사용하는 것이 안티 패턴입니까? 그렇다면 그 이유는 무엇입니까? 그렇지 않다면 어떤 사용 사례가 있습니까?
코드 검토 중에
let
를 보았을 때 "이 작업을 수행하지 마십시오"라는 경보가 울렸으며 제시된 경우 내 직감이 완전히 옳았지만 선험적으로 이것이 확실히 반패턴인 이유를 말할 수 없었습니다. . 동일한 구성 요소의 모든 인스턴스에서 범위를 공유하고 해당 구성 요소의 인스턴스에서만 범위를 공유하려고 한다고 상상해 보십시오.어려운 점은 훌륭한 사용 사례를 생각할 수 없다는 것입니다. 당신 중 누구라도 할 수 있습니까? 또는 반대로, 우리가 절대 이렇게 해서는 안 되는 이유를 설명할 수 있습니까?
여러분의 의견을 기다리겠습니다. 개념을 약간 가지고 놀고 싶다면 1 을(를) 만들었습니다.
... 그리고 재렌더링을 트리거하지 않는 방식으로 그렇게 합니다. 좋아, 사용 사례의 수가 내 눈앞에서 줄어들고 있는 것 같아서 여기에 도달할 수 있습니다. 하지만 여전히. 상상하다. code sandbox
Reference
이 문제에 관하여(모듈 수준에서 블록 범위 변수 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cmborchert/using-block-scoped-variable-at-the-module-level-fl8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)