[관련 주제 추천: react 인터뷰 질문(2020)]
1. redux middleware
답변: 미들웨어는 액션 -> 리듀서(reducer)를 가로채는 프로세스를 맞춤화하는 타사 플러그인 모드를 제공합니다. 액션 -> 미들웨어 -> 리듀서가 됩니다. 이 메커니즘을 통해 데이터 흐름을 변경하고 비동기 작업, 작업 필터링, 로그 출력, 예외 보고 등과 같은 기능을 구현할 수 있습니다.
공통 미들웨어: redux-logger: 로그 출력 제공, redux-thunk: 비동기 작업 처리, actionCreator의 반환 값은 promise
2입니다. : 1 .구성 요소에 필요한 데이터는 상위 구성 요소에서 전달되어야 하며 Flux처럼 저장소에서 직접 가져올 수 없습니다.
2. 구성 요소의 관련 데이터가 업데이트되면 상위 구성 요소가 이 구성 요소를 사용할 필요가 없더라도 상위 구성 요소는 여전히 다시 렌더링되므로 효율성에 영향을 미치거나 필요할 수 있습니다. 판단을 위해 복잡한 shouldComponentUpdate를 작성합니다.
3. 리액트 컴포넌트는 비즈니스 컴포넌트와 기술 컴포넌트로 어떻게 구분되나요?
답변: 구성 요소는 일반적으로 해당 역할에 따라 UI 구성 요소와 컨테이너 구성 요소로 구분됩니다. UI 컴포넌트는 UI 프리젠테이션을 담당하고, 컨테이너 컴포넌트는 데이터 및 로직 관리를 담당합니다. 둘은 React-Redux에서 제공하는 connect 메소드를 통해 연결됩니다.
4. React 수명 주기 기능
답변: 1. 초기화 단계:
getDefaultProps: 인스턴스의 기본 속성을 가져옵니다.
getInitialState: 각 인스턴스의 초기화 상태를 가져옵니다.
comComponentWillMount: 구성 요소가 곧 로드됩니다.
render: 구성 요소가 여기에서 가상 DOM 노드를 생성합니다.
comComponentDidMount: 구성 요소가 실제로 로드된 후
2. 실행 상태:
comComponentWillReceiveProps: 구성 요소가 속성을 수신하려고 할 때 호출됩니다.
shouldComponentUpdate: 구성 요소는 새 속성 또는 새 상태를 수신합니다(false를 반환할 수 있고, 데이터 수신 후 업데이트하지 않으며, 렌더링 호출을 방지하고 후속 기능이 계속 실행되지 않습니다)
comComponentWillUpdate: 구성 요소가 곧 업데이트될 예정이며 속성 및 상태 수정할 수 없습니다
render: 구성 요소가 다시 그려집니다.
comComponentDidUpdate: 구성 요소가 업데이트되었습니다
3. 파괴 단계:
comComponentWillUnmount: 구성 요소가 곧 파괴됩니다
5. 어떤 주기 함수가 반응 성능 최적화인가요?
답변: shouldComponentUpdate 이 메소드는 dom을 다시 그리기 위해 render 메소드를 호출해야 하는지 여부를 결정하는 데 사용됩니다. DOM 렌더링은 많은 성능을 소모하기 때문에 shouldComponentUpdate 메소드에 좀 더 최적화된 DOM diff 알고리즘을 작성할 수 있다면 성능이 크게 향상될 수 있습니다.
6. 가상 DOM이 성능을 향상시키는 이유는 무엇입니까?
답변: 가상 dom은 불필요한 dom 작업을 피하기 위해 dom diff 알고리즘을 사용하여 성능을 향상시키는 js와 실제 dom 사이에 캐시를 추가하는 것과 동일합니다.
구체적인 구현 단계는 다음과 같습니다.
1. JavaScript 객체 구조를 사용하여 DOM 트리의 구조를 표현한 다음 이 트리를 사용하여 실제 DOM 트리를 만들고 이를 문서에 삽입합니다. 상태가 변경되면 재구성합니다. 새로운 객체 트리. 그런 다음 새 트리를 기존 트리와 비교하고 두 트리의 차이점을 기록합니다.
2단계에서 기록한 차이점을 1단계에서 구축한 실제 DOM 트리에 적용하면 뷰가 업데이트됩니다.
7. Diff 알고리즘?
답변: 1. 트리 구조를 레벨에 따라 분해하고 동일한 레벨의 요소만 비교합니다.
2. 비교를 용이하게 하기 위해 목록 구조의 각 단위에 고유한 키 속성을 추가합니다.
3. React는 동일한 클래스의 컴포넌트만 일치시킵니다. (여기서 클래스는 컴포넌트의 이름을 나타냅니다.)
4. 병합 작업에서 해당 컴포넌트의 setState 메서드를 호출하면 React는 해당 컴포넌트를 더티로 표시합니다. 각 이벤트에 루프가 끝나면 React는 더티로 표시된 모든 구성 요소를 확인하고 다시 그립니다.
6. 선택적 하위 트리 렌더링. 개발자는 diff 성능을 향상시키기 위해 shouldComponentUpdate를 재정의할 수 있습니다.
8. React 성능 최적화 솔루션답변: 1) 불필요한 DOM 작업을 피하기 위해 shouldComponentUpdate를 다시 작성하세요. 2) React.js의 프로덕션 버전을 사용하세요.
3) 키를 사용하여 React가 목록에 있는 모든 하위 구성 요소의 가장 작은 변화를 식별할 수 있도록 하세요.
9. Flux의 개념을 간략하게 설명하세요.
답변: Flux의 가장 큰 특징은 데이터의 "일방향 흐름"입니다.
1. 사용자가 View에 액세스합니다
2. View는 사용자의 Action을 발행합니다
3. Dispatcher는 Action을 수신하고 그에 따라 Store를 업데이트하도록 요구합니다.
4. " event
5.View "change" 이벤트를 받은 후 페이지를 업데이트하세요
10. React 프로젝트에서는 어떤 scaffolding이 사용됐나요? Mern? Yeoman?
답변: Mern: MERN은 Mongo, Express, React 및 NodeJS를 사용하여 동형 JS 애플리케이션을 쉽게 생성할 수 있는 스캐폴딩 도구입니다. 설치 시간을 최소화하고 검증된 기술을 사용하여 개발 속도를 높일 수 있습니다.
11. 리액트를 아시나요?
답변: 예, React는 Facebook에서 개발한 경량 구성 요소 라이브러리로 MVC의 V 레이어 문제인 프런트 엔드 뷰 레이어의 일부 문제를 해결하는 데 사용됩니다. 내부 Instagram 웹사이트는 React로 구축되어 있습니다. .
12. React는 어떤 문제를 해결하나요?
답변: 세 가지 문제가 해결되었습니다: 1. 구성 요소 재사용 문제, 2. 성능 문제, 3. 호환성 문제:
13. React 프로토콜?
답변: React가 따르는 계약은 "BSD 라이센스 + 특허 오픈 소스 계약"입니다. 이 계약은 상당히 이상합니다. 귀하의 제품이 Facebook과 경쟁하지 않는다면 자유롭게 React를 사용할 수 있지만, 경쟁이 있다면 귀하의 React는 사용 라이센스가 취소됩니다
14. shouldComponentUpdate를 이해하셨나요?
답변: React 가상 dom 기술은 dom과 가상 dom 간의 지속적인 diff 비교가 필요합니다. dom 트리가 큰 경우 이 비교 작업은 더 많은 시간이 소요됩니다. 따라서 React는 일부 변경 사항이 있는 경우 shouldComponentUpdate와 같은 패치 기능을 제공합니다. , 구성 요소가 새로 고쳐지는 것을 원하지 않거나 새로 고쳐져 이전과 동일하게 유지되는 경우 이 기능을 사용하여 React에 직접 알려 diff 작업이 필요하지 않고 효율성이 더욱 향상됩니다.
15. React는 어떻게 작동하나요?
답변: React는 가상 DOM을 생성합니다. 구성 요소의 상태가 변경되면 React는 먼저 "diffing" 알고리즘을 통해 가상 DOM의 변경 사항을 표시하고 두 번째 단계는 조정이며 DOM은 diff 결과로 업데이트됩니다.
16. React를 사용하면 어떤 장점이 있나요?
답변: 1. 렌더링 기능만 보면 구성 요소가 어떻게 렌더링되는지 쉽게 알 수 있습니다.
2 JSX의 도입으로 구성 요소의 코드를 더 읽기 쉽게 만들고 레이아웃을 더 쉽게 이해할 수 있습니다. 구성 요소 또는 구성 요소가 서로 참조하는 방식
3. SEO 및 성능을 향상할 수 있는 서버 측 렌더링 지원
4. 테스트하기 쉬움
5. React는 View 레이어에만 중점을 두고 사용할 수 있습니다. 다른 프레임워크(예: Backbone.js, Angular.js)와 함께
17. 프리젠테이션 컴포넌트와 컨테이너 컴포넌트의 차이점은 무엇인가요?
답변: 1. 프레젠테이션 구성 요소는 구성 요소의 모양에 관심이 있습니다. 디스플레이는 구체적으로 props를 통해 데이터와 콜백을 허용하고 자체 상태를 거의 갖지 않지만 디스플레이 구성 요소에 자체 상태가 있는 경우 일반적으로 데이터 상태보다는 UI 상태에만 관심을 갖습니다.
2. 컨테이너 구성 요소는 구성 요소가 어떻게 작동하는지에 더 관심이 있습니다. 컨테이너 구성 요소는 프레젠테이션 구성 요소 또는 기타 컨테이너 구성 요소에 데이터와 동작을 제공하며 Flux 작업을 호출하고 이를 프레젠테이션 구성 요소에 대한 콜백으로 제공합니다. 컨테이너 구성 요소는 다른 구성 요소의 데이터 소스이기 때문에 상태를 유지하는 경우가 많습니다.
18. 클래스 구성 요소와 기능 구성 요소의 차이점은 무엇인가요?
답변: 1. 클래스 구성 요소를 사용하면 구성 요소 자체 상태 및 수명 주기 후크와 같은 추가 기능을 사용할 수 있을 뿐만 아니라 구성 요소가 저장소에 직접 액세스하여 상태를 유지할 수 있습니다.
2. props를 받고 구성 요소가 페이지에 자체적으로 렌더링되면 해당 구성 요소는 '상태 비저장 구성 요소'이며 순수 함수를 사용하여 생성될 수 있습니다. 이러한 구성 요소는 멍청한 구성 요소 또는 프레젠테이션 구성 요소라고도 합니다
19. 상태(상태)와 소품(구성 요소)의 차이점은 무엇인가요?
답변: 1. State는 구성요소가 마운트될 때 필요한 데이터의 기본값에 사용되는 데이터 구조입니다. 상태는 시간이 지남에 따라 변경될 수 있지만 대부분 사용자 이벤트 동작의 결과입니다.
2.Properties(프로퍼티의 약어)는 컴포넌트의 구성입니다. Prop은 상위 구성 요소에서 하위 구성 요소로 전달되며 하위 구성 요소에 관한 한 Prop은 변경할 수 없습니다. 컴포넌트는 자신의 props를 변경할 수 없지만 하위 컴포넌트의 props를 하나로 묶을 수 있습니다(통합 관리). Prop은 단순한 데이터가 아닙니다. 콜백 함수도 Prop을 통해 전달될 수 있습니다.
20. Ajax 요청은 React 구성 요소에서 어디에서 시작되어야 합니까?
답변: React 구성 요소에서는 네트워크 요청이 componentDidMount에서 시작되어야 합니다. 이 메서드는 구성 요소가 처음으로 "마운트"(DOM에 추가)될 때 실행되며 구성 요소의 수명 주기에서 한 번만 실행됩니다. 더 중요한 것은 구성요소가 마운트되기 전에 Ajax 요청이 완료되었는지 보장할 수 없다는 점입니다. 그렇다면 이는 마운트 해제된 구성요소에 대해 setState를 호출하려고 시도한다는 의미이며 이는 작동하지 않습니다. componentDidMount에서 네트워크 요청을 하면 업데이트할 구성 요소가 있는지 확인할 수 있습니다.
21. 제어 컴포넌트란 무엇입니까?
답변; HTML에서 ,
22. React에서 Refs의 역할은 무엇인가요?
답변: Refs는 DOM 노드 또는 React 구성 요소에 대한 참조를 얻는 데 사용할 수 있습니다. 참조를 사용하는 좋은 예는 포커스/텍스트 선택을 관리하거나, 명령 애니메이션을 트리거하거나, 타사 DOM 라이브러리와 통합하는 것입니다. 문자열 참조 및 인라인 참조 콜백을 사용하지 않아야 합니다. Refs 콜백은 React에서 권장됩니다.
23. 고차성분이란 무엇인가요?
답변: 고차 구성 요소는 구성 요소를 매개 변수로 사용하고 새 구성 요소를 반환하는 함수입니다. HOC를 사용하면 코드, 논리 및 부트스트래핑 추상화를 재사용할 수 있습니다. 가장 일반적인 것은 아마도 Redux의 연결 기능일 것입니다. 단순히 도구 라이브러리와 간단한 구성을 공유하는 것 외에도 HOC를 위한 가장 좋은 방법은 React 구성 요소 간의 동작을 공유하는 것입니다. 동일한 작업을 수행하기 위해 여러 위치에 많은 코드를 작성했다면 해당 코드를 재사용 가능한 HOC로 리팩토링하는 것을 고려해야 합니다.
24. 화살표 기능을 사용하면 어떤 이점이 있나요?
답변: 1. 범위 안전성: 화살표 함수 이전에 새로 생성된 각 함수에는 고유한 this 값이 있습니다(생성자에서는 새 객체입니다. 엄격 모드에서는 함수 호출에서 this가 정의되지 않습니다. 함수가 "객체 메서드"라고 불린 다음 기본 객체 등), 화살표 함수는 그렇지 않고 둘러싸는 실행 컨텍스트의 this 값을 사용합니다.
2. 단순성: 화살표 함수는 읽고 쓰기 쉽습니다.
3. 명확성: 모든 것이 화살표 함수인 경우 모든 일반 함수를 즉시 사용하여 범위를 정의할 수 있습니다. 개발자는 this
25의 값을 확인하기 위해 언제든지 다음 상위 함수 명령문을 찾을 수 있습니다. setState에 전달된 매개변수가 객체 대신 콜백인 것이 권장되는 이유는 무엇입니까?
답변: this.props와 this.state의 업데이트는 비동기적일 수 있으므로 해당 값을 사용하여 다음 상태를 계산할 수 없습니다.
26. 이것을 생성자에서 바인딩하는 것 외에 다른 방법이 있나요?
답변: 속성 초기화를 사용하여 콜백을 올바르게 바인딩할 수 있으며 create-react-app도 기본적으로 이를 지원합니다. 콜백에서는 화살표 함수를 사용할 수 있지만 문제는 구성 요소가 렌더링될 때마다 새 콜백이 생성된다는 것입니다.
27. 컴포넌트 렌더링을 방지하는 방법은 무엇입니까?
답변: 구성 요소의 렌더링 방법에서 null을 반환하면 트리거된 구성 요소의 수명 주기 방법에 영향을 미치지 않습니다.
28 목록을 렌더링할 때 핵심은 무엇입니까? 키를 설정하는 목적은 무엇입니까?
답변: 키는 React가 어떤 항목이 변경, 추가 또는 제거되었는지 식별하는 데 도움이 됩니다. 키를 배열 내의 요소에 할당하여 (DOM) 요소에 안정적인 ID를 제공해야 합니다. 키를 선택하는 가장 좋은 방법은 목록 항목을 고유하게 식별하는 문자열을 사용하는 것입니다. 렌더링되는 항목에 대한 안정적인 ID가 없는 경우 데이터의 ID를 키로 사용하는 경우가 많습니다. 항목 인덱스를 렌더링된 항목의 키로 사용할 수 있지만 항목을 사용할 수 있는 경우에는 이 방법을 권장하지 않습니다. 재정렬하면 다시 렌더링 속도가 느려집니다
29. (생성자에서) super(props)를 호출하는 목적은 무엇인가요?
답변: 하위 클래스는 super()가 호출되기 전에 이를 사용할 수 없습니다. ES2015에서는 하위 클래스가 생성자에서 super()를 호출해야 합니다. props를 super()에 전달하는 이유는 생성자(하위 클래스)에서 this.props에 대한 액세스를 용이하게 하기 위한 것입니다.
30. JSX란 무엇인가요?
답변: JSX는 JavaScript 구문의 구문 확장이며 JavaScript의 모든 기능을 가지고 있습니다. JSX는 React "요소"를 생성하며, JavaScript 표현식을 중괄호로 묶어 JSX에 포함할 수 있습니다. 컴파일 후 JSX 표현식은 일반 JavaScript 객체가 됩니다. 즉, if 문과 for 루프 내에서 JSX를 사용하고, 이를 변수에 할당하고, 인수로 받아들이고, 함수에서 반환할 수 있다는 의미입니다.
31어린이란 무엇인가요?
답변: JSX 표현식에서 여는 태그(예: )와 닫는 태그(예: ) 사이의 콘텐츠는 특수 속성 props.children으로 포함 태그에 자동으로 전달됩니다. 그 구성 요소와 함께.
이 속성에는 React.Children.map, React.Children.forEach, React.Children.count, React.Children.only, React.Children.toArray를 비롯한 다양한 메서드가 있습니다.
32. React에서 상태란 무엇인가요?
답변: 상태는 props와 유사하지만 비공개이며 구성 요소 자체에 의해 완전히 제어됩니다. 상태는 기본적으로 데이터를 보유하고 구성 요소가 렌더링되는 방식을 결정하는 개체입니다.
33. create-react-app에 대한 의존에서 벗어나게 된 이유는 무엇인가요?
답변: webpack 또는 babel 사전 설정을 구성하려는 경우.
34.리덕스란?
답변: Redux의 기본 아이디어는 전체 애플리케이션 상태를 단일 저장소에 유지하는 것입니다. 저장소는 간단한 JavaScript 개체이며 애플리케이션 상태를 변경하는 유일한 방법은 애플리케이션에서 작업을 트리거한 다음 이러한 작업에 대한 리듀서를 작성하여 상태를 수정하는 것입니다. 전체 상태 변환은 리듀서에서 완료되므로 부작용이 없어야 합니다
35. Redux에서 스토어란 무엇인가요?
답변: Store는 전체 애플리케이션의 상태를 저장하는 자바스크립트 개체입니다. 동시에 Store는 다음 책임도 맡습니다.
36.액션이란?
답변; 액션은 순수 자바스크립트 객체이므로 실행 중인 액션의 유형을 나타내는 유형 속성이 있어야 합니다. 기본적으로 작업은 애플리케이션에서 저장소로 데이터를 보내는 페이로드입니다.
37.리듀서란?
답변: 리듀서는 이전 상태와 액션을 매개변수로 취하고 다음 상태를 반환하는 순수 함수입니다.
38. Redux Thunk의 기능은 무엇인가요?
답변: Redux 썽크는 액션 대신 함수를 반환하는 액션 생성자를 작성할 수 있게 해주는 미들웨어입니다. 특정 조건이 충족되면 썽크를 사용하여 작업 디스패치(dispatch)를 지연할 수 있으며, 이는 비동기 작업 디스패치(dispatch)를 처리할 수 있습니다.
39. 순수함수란 무엇인가요?
답변: 순수 함수는 해당 범위 밖의 변수 상태에 의존하지 않고 변경하지 않는 함수입니다. 이는 또한 순수 함수가 동일한 매개변수에 대해 항상 동일한 결과를 반환한다는 의미이기도 합니다.
프로그래밍과 관련된 더 많은 내용은 PHP 중국어 홈페이지 프로그래밍 입문 칼럼을 주목해주세요!
위 내용은 React에 대한 몇 가지 일반적인 인터뷰 질문(공유)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!