Virtual DOM에서 컴포넌트 변화를 효율적으로 감지하기 위해 컴포넌트 내부는 하나의 DOM 트리 구조로 되어 있어야 한다는 규칙 때문입니다.
function App() {
const name = 'React';
return (
<div>
{/* 여기에 작성하세요 */}
</div>
)
}
export default App;
function App() { const name = 'React'; return ( <div> {name === 'React' && <h1>React입니다</h1>} </div> ) } export default App;
// 1번 코드
function App() {
const name = undefined;
return name;
}
// 2번 코드
function WarningBanner(props) {
if (!props.warn) {
return null;
}
return <div>warning</div>
}
// 3번 코드
function App() {
const name = undefined;
return name || '값이 undefined입니다';
}
// 4번 코드
function App() {
const name = undefined;
return <div>{name}</div>;
}
정답 : 1
React 컴포넌트에서는 함수에서 undefined만 반환하여 렌더링하면 안 됨
그럴 경우 Error: Nothing was returned from render라는 에러가 발생함
// 1번 코드
function App() {
// 주석입니다
const name = 'React';
return (
<>
<div
className="react"
>{name}</div>
<input />
</>
);
}
// 2번 코드
function App() {
const name = 'React';
return (
<>
<div
className="react" // 주석입니다
>{name}</div>
<input />
</>
);
}
// 3번 코드
function App() {
const name = 'React';
return (
<>
<div
className="react"
>{name}</div> // 주석 입니다
<input />
</>
);
}
// 4번 코드
function App() {
const name = 'React';
return (
<>
{/* 주석 입니다 */}
<div className="react">{name}</div>
<input />
</>
);
}
정답 : 3
1. 함수 내부에서 // 뒤에 주석을 작성 가능함
2. 시작 태그를 여러 줄 작성할 경우, 그 내부에서 // 뒤에 주석을 작성 가능함
4. JSX 내부에서 주석을 작성할 때는 {/* */} 안에 작성함
- 데이터를 업데이트하면 전체 UI를 Virtual DOM에 리렌더링함 (Virtual DOM : DOM을 추상화한 자바스크립트 객체)
- 이전 Virtual DOM에 있던 내용과 현재 현재 내용을 비교함
- 바뀐 부분만 실제 DOM에 적용함
클래스형 컴포넌트는 state와 LifeCycle 메서드가 있고 임의의 메서드를 작성할 수 있음
함수 컴포넌트에는 state와 LifeCycle 메서드가 없지만 react v16.8 업데이트 이후 useState라는 훅을 사용해서 state와 setter 함수를 정의하고 사용할 수 있음
정답 : 2
props의 기본값을 설정하지 않으면 에러가 발생하지 않고 prop에 undefined가 전달됨
정답 : 3
state에서 파생된 UI 또는 데이터는 트리구조에서 state를 소유한 컴포넌트 아래에 있는 컴포넌트에만 영향을 미침
class Counter extends Component {
constructor(props) {
super(props);
this.state = {
number: 0,
fixedNumber: 0
};
}
// 1번 코드
render() {
const { number, fixedNumber } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
number = number + 1;
}}
>
+1
</button>
</div>
)
}
// 2번 코드
render() {
const { number, fixedNumber } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState({ number: number + 1 });
}}
>
+1
</button>
</div>
)
}
// 3번 코드
render() {
const { number, fixedNumber } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState(prevState => ({
number: prevState.number + 1
}));
}}
>
+1
</button>
</div>
)
}
// 4번 코드
render() {
const { number, fixedNumber } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState(
{
number: number + 1
},
() => {
console.log('setState 호출');
console.log(this.state);
}
);
}}
>
+1
</button>
</div>
)
}
}
정답 : 1
state 값을 변경할 때는 setState 혹은 useState를 통해 전달받은 setter 함수를 사용해야함
componentDidMout() : 컴포넌트가 DOM에 렌더링된 이후에 실행됨
componentWillUnmount() : 컴포넌트가 DOM에서 삭제된 이후에 실행됩니다.
다음 중 옳지 않은 설명을 고르세요.
정답 : 1
함수 컴포넌트에서 useState 함수를 사용하여 state 초기값을 설정할 때 값의 형태는 자유임