본문 바로가기

웹언어/Svelte

[Svelte강좌] 3강 State(상태값) - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

 

 

 

 

** 영상으로 보고 싶은 분은 아래 주소를 클릭하세요.

1. 기본개념 - https://youtu.be/m7wrjrUf4oE

2. 확장개념 - https://youtu.be/o8sYNrUD6QM

 

 

 

 

 

 

 

 

 

1. State(상태 값)란?


- State란 컴포넌트가 어떤 값을 관리할 때 사용하는 것을 말합니다.

- 상태 값은 컴포넌트로 표현할 값의 상태나 목록이 되기도 하며, 이벤트를 통해 발생된 마우스나 키보드의 데이터도 상태 값이 될 수 있습니다. 즉, 프런트엔드를 구성하는 모든 데이터가 상태 값입니다.

- 리액트(React)에서는 useState()라는 함수를 통해 값을 관리하는데, 스벨트(Svelte)는 자바스크립트에서는 변수처럼 사용하고, 마크업에서는 중괄호({ })를 사용하여 상태 값을 표현합니다. 

 

 

 

 

 

 

1) 텍스트 콘텐츠로 처리

## 기본 문법

<script>
	let 상태변수 = 값;
</script>

<태그> { 상태변수 } </태그>

 

 

 

- Svelte 파일들을 처음 실행하면 나오는 코드를 보겠습니다.

## 예시 코드 보기

<script>
	let name = 'world';
</script>

<h1>Hello {name}!</h1>

- script 파트에서 변수명이 name에 상태 값을 담고, 마크업 쪽에서 { } 중괄호를 통해 값을 표현한 것입니다.

- 이렇게 관리되는 값을 State, 즉, 상태 값이라고 합니다. 

 

 

 

## 상태값 변경

- script파트에서 변숫값을  변경하니까, 마크업 쪽 { } 중괄호 값이 변하는 것이 확인됩니다. 

 

 

 

 

 

 

 

 

 

2) 태그 속성 값에 처리

- 태그 속성값에도 State값을 처리할 수 있습니다.

 

## 문법

<script>
	let 변수명 = 값;
</script>

<img src={변수명} />

 

 

## 코드 예시

- 이번에는 이미지 경로로 작성해보겠습니다.

- 이미지는 아래 이미지를 사용해주세요.,

- url : https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGz29o%2FbtrNgcGtBfI%2FbzaUnvh0SXlevptFhvYfwK%2Fimg.png 

 

<script>
	let url = 'https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGz29o%2FbtrNgcGtBfI%2FbzaUnvh0SXlevptFhvYfwK%2Fimg.png';
</script>

<img src={ url } alt="고양이이미지" />

 

 

 

## src속성 속기법

<script>
	let 변수명 = 값;
</script>

<img {변수명} />

- 변수명을 바로 속성명으로 사용 가능합니다.

- 대신 변수 명의 이름이 속성명과 같아야 합니다.

- 위에 State 변수명을 url이라고 적었던 것은 되지 않습니다.

 

 

## 코드 보기

<script>
	let src = 'https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGz29o%2FbtrNgcGtBfI%2FbzaUnvh0SXlevptFhvYfwK%2Fimg.png';
</script>

<img { src } alt="고양이이미지" />

- 위 코드와 같이 state  이름을 태그 속성명과 같게 줘야 처리가 됩니다.

 

 

## 결과 보기

 

 

 

 

 

 

 

 

 

 

 

3) State  값의 태그 문자열 인식

- 변수에 문자열을 주었을 때 그 문자열에 태그가 있다면 인식시켜 보겠습니다.

 

## 문법

<script>
	var 변수명 = 값;
</script>

<태그명> {@html 변수명 } </태그명>

 

 

## 태그 미인식 코드

<script>
	let str = '안녕하세요! <strong>오쌤의 니가스터디</strong>입니다.';
</script>

<p>{ str }</p>

- 태그가 브라우저에 문자열로 반환이 됩니다.

 

 

 

## 태그 인식 코드

<script>
	let str = '안녕하세요! <strong>오쌤의 니가스터디</strong>입니다.';
</script>

<p>{ @html str }</p>

- 오쌤의 니가스터디 부분이 굵게 잘 처리되는 것이 확인됩니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. click  이벤트를 이용한 State 값 변경


- 이번에는 버튼 클릭을 통해 State값을 변경해보도록 하겠습니다.

 

 

## 코드 보기

<script>
	let num = 0; //state(상태값)

	//기존 변수값에서 1씩 증가
	const increaseNumber = () => num++;
	
	//기존 변수값에서 1씩 증가
	const decreaseNumber = () => num--;
</script>

<button on:click={increaseNumber}>+</button>
<button on:click={decreaseNumber}>-</button>
<hr />
<h1>클릭횟수 : { num }</h1>

- script파트에 [ num ] 변수에는 클릭 시 숫자가 증가될 상태 값을 담습니다.

- 처음에는 클릭한 적이 없으니까 기본값으로 [ 0 ]을 담아줍니다.

- [ increaseNumber ]는 함수로 [ num ] 변수에 증가 연산자를 줘서 함수가 실행 시, 기존 변숫값에서 1씩 증가하게 처리합니다.

- [ decreaseNumber ]는 함수로 [ num ] 변수에 감소 연산자를 줘서 함수가 실행 시, 기존 변숫값에서 1씩 감소하게 처리합니다.

- 함수들을 화살표 함수로 처리했습니다. 화살표 함수를 잘 모르는 분은 제 블로그 ES6 강좌를 보고 오시기 바랍니다.

- 마크업 부분에  <button> 태그를 처리하고 클릭이벤트에 [ increaseNumber ] 함수와  [ decreaseNumber ] 함수를 호출합니다. 

<h1> 태그에 상태 값인 [ num ] 변수를 { } 중괄호로 처리해줍니다. 

 

 

## 결과 보기

- 플러스 버튼을 누르면 숫자가 1씩 증가되고, 마이너스 버튼을 누르면 1씩 감소하는 것을 확인할 수 있습니다.

- 이렇게 상태 값을 이벤트에 따라 바꿀 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 객체 속성을 State로 활용


- 위에서 본 간단한 변수 형태 말고, 객체 방식으로도 데이터 값을 상태 값으로 활용할 수 있습니다.

 

 

## 문법 보기

<script>
	let 객체명 = {
    	속성명1: 값,
        속성명2: 값
    }
</script>

<태그1> { 객체명.속성명1 } </태그1>
<태그2> { 객체명.속성명2 } </태그2>

 

 

## 코드 보기

<script>
	let artist = {
		name: '진',
		age: 31,
		height: 179,
		group: '방탄소년단',
		img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F8152fad7a07738b7d11b8fe1b44b3cd0db34d5fa5c35abee4deae2fd163a4218f003e753532e1edd20a4db12e88382c0f3342d054cba5a0d38ba8bd9be593138ae4b6404caf7373e92540f2688467b825caa89de860dccc282395d440f6f72db&type=fff264_180'
	}
</script>

<h1><img src="{artist.img}" alt=""></h1>
<h1>이름 : { artist.name }</h1>
<h1>나이 : { artist.age }</h1>
<h1>키 : { artist.height }</h1>
<h1>소속그룹 : { artist.group }</h1>

- script파트에서는 [ artist ]라는 객체를 선언하고, 각각의 속성들에 값을 전부 담았습니다. 

- img값은 네이버에서 검색해서 나무 위키에 사용된 이미지 주소를 복사해왔습니다. 

- 마크업 부분에서 각각의 속성 값들을 호출했습니다.

 

 

## 결과 보기

- 결과가 잘 나오는 것이 확인됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

4. 객체로 이루어진 배열을 이용해서 상태 값 표시


- 이번에는 방탄소년단 전부를 반복해서 만들어 보겠습니다.

 

## 코드 보기

<script>
	let bts = [
		{
			name: 'RM(김남준)',
			birth: 1994,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2Fbbd9629ef96c284dfca79eb3b26d49e49ba24b78117abba76b3108cd2b5b8b2860f4d7ceeaef314116b608d5b9d7b080d7e7751e385cc03988992088f8b932b5280a1d1075b1c5bd4759e679166564ca9a95b4ca0bdbdaa219462eacbcbd37be&type=fff264_180'
		},
		{
			name: '진(김석진)',
			birth: 1992,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F8152fad7a07738b7d11b8fe1b44b3cd0db34d5fa5c35abee4deae2fd163a4218f003e753532e1edd20a4db12e88382c0f3342d054cba5a0d38ba8bd9be593138ae4b6404caf7373e92540f2688467b825caa89de860dccc282395d440f6f72db&type=fff264_180'
		},
		{
			name: '슈가(민윤기)',
			birth: 1993,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2Ff4f55ac286d2de6ead4dcf4ab419ca0ba3c44e3badcffe171f727d2653d9dce70d3a2a016307c21a9345fe53c74f099657bc5c96006acc61dc32eecff8e197818ed47d31fbfffc2e17654634345a357017536656b0258d7d1b26ee6b687095b4&type=fff264_180'
		},
		{
			name: '제이홉(정호석)',
			birth: 1994,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F67b1d265064ef6fce5ff59b3cf9195e64afade8493633cbf57087c55d40655c08a9481278bf960455ab4ea434bc3c250d57333d6c48743124de4c20d359684728713f1d0b8b063bc510feece8729186146cdbdba6cba15864bc4582aeebce6d5&type=fff264_180'
		},
		{
			name: '지민(박지민)',
			birth: 1995,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F379e369eeb01b0fff2ee569d236747e80764442246f1e00bdbc34f658e04847956c3e323a151ebd6f9306aa2214d3f4b5a7ee7142629a1fc727c0ece80642b8d1774fd7f36f2e7fb997cbc7c8f9e135c80e06dd63905e3d4b0de5b1a4a6e143d&type=fff264_180'
		},
		{
			name: '뷔(김태형)',
			birth: 1995,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F6e0bcfbe998a033312f0bf704f9880b48048bd960bacafe27ddc7080a9f3149e15ff59e4182c0436b95eed13012fc28c6d0219557cec1f7f9beb2438d64f36072cf50e4e513bb5ed4f3d62aba528f3b06d3edc89d5011d62961f04dc6d60fdf8&type=fff264_180'
		},
		{
			name: '정국(진정국)',
			birth: 1995,
			img: 'https://search.pstatic.net/sunny/?src=https%3A%2F%2Fw.namu.la%2Fs%2F7619aa7dee9b330bef6e184fdb6f8ae4bdaa49915f6cb516266b5b8a7e814e65b39931cb4baad7cffcd61927d0da0e2fa1950e3776e84a339b8c8d3ff943cc25697f4ec55a52b07869b7a2fe04fbe508b4145fc8b26dcb5d437d34e734ebefed&type=fff264_180'
		},
	];
</script>

{#each bts as item}
<h3><img src="{item.img}" alt=""></h3>
<h3>이름 : { item.name }</h3>
<h3>출생 : { item.birth }</h3>
<hr>
{/each}

- 위의 객체는 배열로 담아 값들을 나열시켰습니다.

- [ bts ]라는 변수에 값을 전부 담았습니다.

- img값은 네이버에서 검색해서 나무 위키에 사용된 이미지 주소를 복사해왔습니다. 

- 위 마크업 부분에 나온  {#each} 부분은 상태 값이 배열일 때 반복해서 출력해주는 문법입니다.

- 지금은 맛보기로만 확인한 것이니 추후 반복 블록에서 다시 공부하겠습니다.

 

 

 

## 결과 보기

- 배열돼서 브라우저에 잘 표시된 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형