HTML 웹 (인터프리터 방식)
서버언어/React 앱 (컴파일 방식)
"쇼핑몰 상품 레이아웃 버튼으로 사용성 개선처리한 예제"
README.md - 내 홍보문구 / 벨로그 주소 등 집어넣는 것임
패키지.json - 부트스트랩, 리액트용 부트스트랩 등등
깃 이그노어 - #상품 이미지 저작권 문제로 제외
즉, "public 방에 product 만들고, 거기에 이미지 넣어라!" 라는 뜻! (이런 거 체크하라)
'저작권 문제로 상품 이미지가 제외'되었으니 엑박뜰 것! (아래처럼 됨)
이때, 폴더명을 무엇으로 해야 하나? 'product'
const [ viewType, viewTypeUpdate ] = useState( 'symple' );
<!-- [ 배 열 ] 에 = [ 배열 ]을 대입!
useState 배열을 자리에 맞춰서 왼쪽으로 옮기겠다 -->
<!-- ex) const [ a, b ] = [ 1, 2 ] -->
<!-- 변수 변수변경하는_함수 변수초기값 -->
const [ viewType, viewTypeUpdate ] = useState( 'symple' );
viewTypeUpdate( c )
<!-- "초기값 'symple'인 viewType 값을 'c'으로 바꿔준다!" & 렌더링 -->
viewTypeUpdate 함수 - 대입식을 갖고 있음.
<!-- 화살표함수(리턴만 하는 함수)만 가능.
(리턴식만 들어가므로, += ++ 연산식 쓰면 안됨) -->
viewTypeUpdate( viewType => viewType + 1 )
<!-- 왜? ↑↑ 얘가 대입식 가지니까 -->
const [ viewType, viewTypeUpdate ] = useState( ['회사소개', '제품소개'] );
말하자면, viewType = ['회사소개', '제품소개'] 인 셈. //초기값
<script>
viewTypeUpdate( ['몰', '제품소개'] )
// 결과 viewType = ['몰', '제품소개']
// viewType = ['회사소개', '제품소개'] 라는 원본이 훼손됨!
</script>
<script>
const copy = viewType; // 근데 이건 값이 아닌, '위치'를 받은 것!
// copy[0]=viewType[0]
copy[0] = '몰'
viewTypeUpdate( copy )
// 결과 viewTypeUpdate( ['몰', '제품소개'] )
// 여전히 원본 훼손!
</script>
그럼 어떡해?
배열의 실제 값이 아닌, 위치[ 0 ][ 1 ]를 저장 후 (=위치참고)
값은 그때그때 위치로 가서 꺼내쓴다
<script>
viewType = ['회사소개', '제품소개'] // 원본
const copy = [ ...viewType ]; // '...'이란? = "[ ]기호 벗길게" (위치를 만들어줌!)
const copy = [ '회사소개', '제품소개' ]; // 새 위치에 값을 카피해 넣음!
//viewType = ['회사소개', '제품소개']와 위치 다름!
copy[0] = '몰' // copy[0]에 새 값 삽입
copy = [ '몰', '제품소개' ]; // 새 위치에 새 값이 삽입됨!
viewType = ['회사소개', '제품소개']; // 원본은 훼손되지 않음!
//--------------------
viewTypeUpdate(copy) // copy를 viewType으로 알고 산다 (값 변경 & 렌더링)
</script>
답, 이제부터 copy가 대체한다 (하지만 copy라고 쓰면 안됨!)
※※ 37일차 - useState 배열/객체 다루기
https://velog.io/@la_sta/37%EC%9D%BC%EC%B0%A8-useState%EC%99%80-%EB%B0%B0%EC%97%B4%EA%B0%9D%EC%B2%B4
리스트형 버튼 클릭하면, { viewTypeUpdate( 'list' ); }
→ div #productWrap의 클래스가 'list' 로 바뀜
→ viewTypeUpdate 함수가 viewType 값을 'list'로 바꿔준다 & 렌더링
갤러리심플 버튼 클릭하면, { viewTypeUpdate( 'symple' ); } ←초기값
→ div #productWrap의 클래스가 'symple' 로 바뀜
→ viewTypeUpdate 함수가 viewType 값을 'symple'로 바꿔준다 & 렌더링
갤러리디테일 버튼 클릭하면, { viewTypeUpdate( 'multi' ); }
→ div #productWrap의 클래스가 'multi' 로 바뀜
→ viewTypeUpdate 함수가 viewType 값을 'multi'로 바꿔준다 & 렌더링
+) div 클래스 'list' 'symple' 'multi'마다 scss 아래와 같이 달라짐
<ul>
{ <!-- 경로, 번호 -->
map( ( item, index )=>{ } )
return // 태그 뱉을 때 반드시 return 필요
}
</ul>
const proinfo = [ 이미지들 ] 을
const proinfo = { 오브젝트 } 로 만들기
결과물