텍스트를 입력하면 (개발자도구에서 해당 element를 선택해놓고 텍스트입력을 해보면) <br>태그가 텍스트 입력했을 때 사라져있음을 볼 수 있다.
하지만 IE에서는 텍스트를 입력했어도 뒤에 <br /> 태그가 남아있었다.
enter 직 후텍스트 입력 후
두 번째 차이점, range의 범위가 다르다.
let selection = document.getSelection();
let range = selection.getRangeAt(0);
let currentNode = range.startContainer;
currentNode를 확인해보면 Chrome에서는 한글을 입력에 enter를 쳐서 확인해도 range의 startOffset과 endOffset이 같은데, IE에서는 한글을 입력중에 엔터를 친 경우에 아직 조합이 끝났다고 보지않아 startOffset과 endOffset이 차이가 있었다.
import React from'react';
import {Image, ScrollView, Text} from'react-native';
const logo = {
uri: 'https://reactnative.dev/img/tiny_logo.png',
width: 64,
height: 64,
};
// 아래로 스크롤바를 밀어서 페이지 이동할 수 있다. // pagiongEnabled prop을 넣으면 swipe 될 때 scroll view의 size 몇 개를 넘기고 멈춘다. // 자세한 사항: https://reactnative.dev/docs/scrollview#pagingenabled// maximumZoomScale, minimumZoomScale prop을 통해서 사용자가 줌인, 줌아웃 가능하게 할 수도 있음.// 화면에 맞지 않는 긴 리스트가 있다면 FlatList 사용 권장const App = () => (
<ScrollView><Textstyle={{fontSize:96}}>Scroll me plz</Text><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Textstyle={{fontSize:96}}>If you like</Text><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Textstyle={{fontSize:96}}>Scrolling down</Text><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Textstyle={{fontSize:96}}>What's the best</Text><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Textstyle={{fontSize:96}}>Framework around?</Text><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Imagesource={logo} /><Textstyle={{fontSize:80}}>React Native</Text></ScrollView>
);
exportdefault App;
FlastList 변하지만 구조적으로 유사한 데이터의 스크롤되는 리스트를 담는 컴포넌트. 시간이 지남에 따라 변하는 아이템이 있는 데이터의 긴 리스트에 잘 작동한다.
★ 일반적인 ScrollView와 달리 화면에 현재 보이는 요소들만 렌더링한다. 한 번에 모드 요소를 렌더링하지 않음. ★
FlastList 컴포넌트는 data와 rederItem 두 가지의 prop이 필수이다. data는 리스팅할 데이터. renderItem은 데이터에서 하나 꺼내서 렌더링되는 컴포넌트를 돌려준다.
// AS-ISfunctionApp() {
/* 여기에서 키보드 타자를 칠 때마다 (onChange될 때 마다)
setFirstName 을 통해 함수를 호출하고 다시 렌더링 되는데,
re-rendering performance를 최적화 하기 위해서는,
<PageContent /> 는 input의 state에 영향을 받지 않으므로
input의 state를 다루는 컴포넌트를 따로 만든다. */const [firstName, setFirstName] = useState('');
return (
<><form><inputvalue={firstName}onChange={e => setFirstName(e.target.value)} />
</form><PageContent /></>
);
}
// TO-BEfunctionApp() {
return (
<><SignupForm /><PageContent /></>
);
}
functionSignupForm() {
const [firstName, setFirstName] = useState('');
return (
<form><inputvalue={firstName}onChange={e => setFirstName(e.target.value)} />
</form>
);
}
/* 이 경우 performance가 상당히 향상되는데,
이제는 키입력에 따라 onChange 이벤트가 호출될 때,
SignupForm만 다시 렌더링하기 때문이다. */