적으면 많다.애플리케이션 성능을 향상시키기 위한 React 코드 단순화 - 섹션 1
19718 단어 webdevreactjavascripttutorial
개발자로서 우리는 과도한 설계와 과도한 개발을 피해야 한다. 적은 자원이 있어야만 같은 결과를 실현할 수 있을 때 우리는 너무 많이 해야 한다.이것은 구성 요소를 더욱 작은 구성 요소로 재구성하고 구성 요소의 입력/출력의 복잡성을 낮추며 과도한 처리와 복잡한 알고리즘의 조합을 피할 수 있다.
우리의 목표는 모든 것을 가능한 한 간단하게 하는 것이지, 그것을 더욱 간단하게 하는 것이 아니다.즉, 과부하를 인지하지 않은 상태에서 가능한 한 효율적으로 일하고, 우리가 하는 일을 가능한 한 간단한 수준으로 줄이지 않으면 통상적으로 더 많은 일을 창조할 수 있다는 것이다.이것은 새 프로그래머에게만 한정된 문제가 아니다.하나의 목표를 실현하기 위해서 우리는 모두 더욱 짧은 길을 걸었다.때때로 우리는 다른 선택이 없다. 때때로 우리가 이렇게 하는 것은 우리가 더 좋은 방법을 모를 수도 있고, 다른 때는 우리가 정확한 일에 시간을 쓰고 싶지 않기 때문이다.
'적으면 많다'는 것은 다양한 경험을 가진 개발자가 참여할 수 있을 뿐만 아니라 참여해야 한다.이것은 응용 프로그램 개발을 개선하고, 사용하는 응용 프로그램을 개선하며, 더욱 효과적으로 작업할 수 있도록 도와줄 것입니다.개발자의 최종 목표를 평가하는 것은 코드 줄이 되어서는 안 된다.그것은 코드 품질, 오류율, 재작업 요구에 있을 것이다.
어셈블리 단순화
우리는 기존의 부품에 대해 철저한 점검 수리를 하지 않고 여러 가지 전략을 취해 우리의 부품을 간소화할 수 있다.각 전략은 서로 다른 블로그에 소개될 것이다.
useEffect
및 useState
redux
및 redux-saga
1. 응용 프로그램이 완성된 MVC 규칙과 일치하는 상태를 디스플레이와 분리합니다.
전통적인 응용 프로그램 설계는 MVC 원칙에 따라 응용 프로그램 논리를 세 가지 다른 구성 요소로 나눈다.모델, 뷰 및 컨트롤러컨트롤러는 사용자의 진입과 종료, 그리고 사용자 이벤트를 처리한다.모델은 사용자 데이터의 변화에 응답하고 보기는 시종 모델을 반영해야 한다.
일반적인 어셈블리 구조를 단순화하는 예를 살펴보겠습니다.
const globalState = someStateTool();
const myComponent: React.FC<> = () => {
const [ myState, setMyState ] = useState<any>({});
const [ loaded, setLoaded ] = useState<boolean>(false);
useEffect(() => {
setTimeout(() => { setLoaded(true); }, 2500);
setTimeout(() => { globalState.set("foo", "bar")}, 5000);
}, [])
return loaded ? (<MySubComponent/>) : (<SpinnerComponent/>);
}
const mySubComponent: React.FC = () => {
const [ someState, setSomeState ] = useState<any>(null);
globalState.subscribeTo("someEvent", ev => setSomeState(ev.data));
const handleClick = () => globalState.set("foo", "bar");
return (
<div>
<button onClick={handleClick}>Some title</button>
</div>
<div>{someState.foo}</div>
)
}
모든 구성 요소는 이 구성 요소에 특정한 독립된 기능을 포함한다.따라서 순수하지는 않지만 독립적이고 교환이 가능하다.이러한 유형의 구성 요소는 고유하게 각종 사용자 입력 행위와 데이터 구동 이벤트에 응답한다.부모 구성 요소가 아닌 흐름, 이벤트 구독, 기타 데이터와 이벤트 원본에 있으면 복잡성의 증가와 결합의 증가에 수반된다.모든 구성 요소에는 대량의 테스트 작업도 관련된다. 왜냐하면 둘 다 각종 서비스와 공급자를 모의하고 행위와 상호작용을 처리해야 하기 때문이다.
// Create a contract for the sub component
type SubComponentType = { foo: string, handleClick: () => void };
const globalState = someStateTool();
const myComponent: React.FC<> = () => {
const [ myState, setMyState ] = useState<any>({});
const [ loaded, setLoaded ] = useState<boolean>(false);
globalState.subscribeTo("someEvent", ev => setMyState(ev.data));
const handleClick = () => globalState.set("foo", "bar");
useEffect(() => {
setTimeout(() => { setLoaded(true); }, 2500);
setTimeout(() => { globalState.set("foo", "bar")}, 5000);
}, [])
return loaded ? (<MySubComponent foo={myState.foo} handleClick={handleClick}/>) : (<SpinnerComponent/>);
}
// Make sure our component adheres to the type contract
const mySubComponent: React.FC<SubComponentType> = ({ foo, handleClick }) => {
return (
<div>
<button onClick={handleClick}>Some title</button>
</div>
<div>{foo}</div>
)
};
우리는 심지어 변환 구성 요소를 고급 구성 요소로 분리하거나 상태를 바탕으로 서로 다른 구성 요소를 나타내는 포장 구성 요소로 분리할 수 있다.type SubComponentType = { foo: string, handleClick: () => void };
const globalState = someStateTool();
const myComponentLoader: React.FC = () => {
const [ loaded, setLoaded ] = useState<boolean>(false);
useEffect(() => {
setTimeout(() => { setLoaded(true); }, 2500);
}, [])
return loaded ? (<MyComponent/>) : (<SpinnerComponent/>);
}
const myComponent: React.FC<> = () => {
const [ myState, setMyState ] = useState<any>({foo: globalState.get("foo")});
globalState.subscribeTo("someEvent", ev => setMyState(ev.data));
const handleClick = () => globalState.set("foo", "bar");
return <MySubComponent foo={myState.foo} handleClick={handleClick}/>;
}
const mySubComponent: React.FC<SubComponentType> = ({ foo, handleClick }) => {
return (
<div>
<button onClick={handleClick}>Some title</button>
</div>
<div>{foo}</div>
)
};
동일한 구성 요소 구조를 나타내는 행 코드를 더 많이 만들었지만 다음을 수행했습니다.MySubComponent
는 순조로 나뉜다.같은 입력을 주면 항상 같은 출력이 나와야 한다MyComponent
효소 같은 도구로 테스트하기 쉽다. 서브어셈블리가 불러오는지 확인하기만 하면 된다Reference
이 문제에 관하여(적으면 많다.애플리케이션 성능을 향상시키기 위한 React 코드 단순화 - 섹션 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jmitchell38488/less-is-more-simplify-your-react-code-to-super-power-your-applications-part-1-2ga2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)