no image
[Svelte]반응형 변수
반응형 변수 Reactive assignments Home number : {number} Plus Minus 이제 Plus버튼을 누르면 number변수는 1이 증가하고 Minus버튼을 누르면 number는 1씩 감소된다. 그렇다면 화면에 보이는 숫자는 변경이 될까? 잘 변경된다. Reactive declarations 위와 같은 방법으로 Home컴포넌트에 number2와 플러스마이너스 함수도 만들어 보자. 간단하게 하기 위해서 script태그 안에 내용을 복붙후에 변수와 함수뒤에 "2"만 붙여주도록 하고 number2역시 화면에 보여주도록 하겠다. 보기 편하게 html에 스타일을 조금 주겠습니다~! Home number : {number} Plus Minus number2 : {number2} Plus..
2022.01.28
no image
[Svelte] 페이지 라우팅, svelte-routing
이전 시간에 만들어 뒀던 컴포넌트는 다 지우고 시작하겠습니다! 라우터 생성 npm install svelte-spa-router npm install 을 해주자. 라우터 생성 이전에 컴포넌트를 3개 만들어주자. Home컴포넌트는 메인페이지, Contact는 두번째 페이지, Header는 모든페이지에서 보여줄 네비바이다. 컴포넌트 내용 작성 Home페이지와 Contact페이지 if 블록은 다음 포스팅에 있다 Home {#if params} {params.test} {/if} Contact 모든 페이지에서 보일 Header 컴포넌트 Home Contact1 Contact2 만들어둔 네비게이션에 Home, Contact1, Contact2를 클릭하면 localhost:8080뒤에 path가 변경과 동시에 해당..
2022.01.23
no image
[Svelte] 컴포넌트 및 변수, props
컴포넌트 생성 및 렌더링 src 폴더 하위에 Component 폴더를 생성하고 MyName.svelte 파일(컴포넌트)을 만들어 주자. JoY MyName.svelte 파일안에 span 태그에 JoY를 넣어주고. Hello ! App.svelte 에서 MyName 컴포넌트를 불러와서 보여주면 끝이다! 이때 import 해온 MyName 컴포넌트는 일반적인 태그처럼 사용하면 된다. MyName 컴포넌트에 적어 둔 JoY라는 이름이 보인다! props 선언 및 바인딩 이제 컴포넌트간의 변수를 전달하기 위해서 props 를 선언해봅시다. 이전 포스트 에서 변수 선언은 배웠었다! Hello ! MyName 컴포넌트를 뿌려주는 부분에서 name="JoY"를 넣는다. 여기서 name 은 MyName 컴포넌트에 할당..
2022.01.19
no image
[Svelte] 변수
svelte 변수 선언 Hello {name}! Hello World! 가 Hello JoY! 로 변경된게 확인된다! 개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!
2022.01.18
no image
[Svelte] Hellow World!
svelte 프로젝트 생성 npx degit sveltejs/template my-svelte-project (my-svelte-project 는 폴더 명) cd my-svelte-project npm install npm run dev my-svelte-project => 프로젝트 명(폴더 이름) npm run dev 이후 -Local: http://localhost:8080 (포트는 5000으로 생성되기도 한다) 이부분을 ctrl 클릭 해주거나 복사 후 주소창에 넣으면 된다. 개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!
2022.01.17
no image
[Svelte] 소개
Svelte(스벨트)란? 프론트엔드 프레임워크이다. svelte 공식 사이트에 따르면 Svelte is a radical new approach to building user interfaces. Whereas traditional frameworks like React and Vue do the bulk of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app. Svelte는 사용자 인터페이스를 구축하기 위한 급진적인 새로운 접근법이다. 리액트나 뷰와 같은 기존 프레임워크는 브라우저에서 대부분의 작업을 수행하는 반면, Svelte는 앱을 만들 때 발생하는 컴파일 ..
2022.01.16

반응형 변수

Reactive assignments

<!--./src/Component/Home/Home.svelte-->
<script>
  //number 변수 선언
  let number = 0;

  //number가 1씩 더해지는 함수 선언
  function plusNumber() {
    number++;
  }
  //number가 1씩 빼지는 함수 선언
  function minusNumber() {
    number--;
  }
</script>

<h1>Home</h1>
<!-- number를 화면에 보여준다. -->
<h2>number : {number}</h2>
<!-- 버튼 두개 생성 -->
<!-- 첫번째 버튼에는 on:click 에 plusNumber 함수를 넣어준다. -->
<button on:click={plusNumber}>Plus</button>
<!-- 두번째 버튼에는 on:click 에 minusNumber 함수를 넣어준다. -->
<button on:click={minusNumber}>Minus</button>

페이지 화면

이제 Plus버튼을 누르면 number변수는 1이 증가하고 Minus버튼을 누르면 number는 1씩 감소된다.

그렇다면 화면에 보이는 숫자는 변경이 될까?

잘 변경된다.

Reactive declarations

위와 같은 방법으로 Home컴포넌트에 number2와 플러스마이너스 함수도 만들어 보자.

간단하게 하기 위해서 script태그 안에 내용을 복붙후에 변수와 함수뒤에 "2"만 붙여주도록 하고 number2역시 화면에 보여주도록 하겠다.

보기 편하게 html에 스타일을 조금 주겠습니다~!

<!--./src/Component/Home/Home.svelte-->
<h1>Home</h1>
<div class="numbers-container">
  <div class="number-container">
    <h2>number : {number}</h2>
    <button on:click={plusNumber}>Plus</button>
    <button on:click={minusNumber}>Minus</button>
  </div>
  <div class="number-container">
    <h2>number2 : {number2}</h2>
    <button on:click={plusNumber2}>Plus</button>
    <button on:click={minusNumber2}>Minus</button>
  </div>
</div>

<style>
  .numbers-container {
    display: flex;
  }
  .number-container {
    margin: 0 20px 0 20px;
  }
</style>

간단하게 div태그로 감싸고 스타일만 준거니 복붙하시면 되겠습니다.

페이지 화면

이제 number와 number2의 합친값을 화면에 보여주려한다.

<!--./src/Component/Home/Home.svelte-->
<sciprt>
//추가 할 내용...
let sum = number + number2;
</script>

<!-- 추가 할 내용... -->
<!-- .numbers-container의 최하단에 추가해주자 -->
<div class="number-container">
  <h2>sum : {sum}</h2>
</div>

버튼을 눌러도 sum은 변화가 없다.

sum 변수가 number 혹은 number2의 값변경에 의해서 같이 변하게 하는 방법은 아주 간단하다.

sum 앞에 let 을 $: 로 변경만 해주면 된다.

<!--./src/Component/Home/Home.svelte-->
<sciprt>
//이전에 선언된 sum
//let sum = number + number2;
//이렇게 선언하면 끝이다.
$:sum = number + number2;
</script>

Reactive statement

<!--./src/Component/Home/Home.svelte-->
<script>
	//추가 할 내용...
    //sum이 변경될 때마다 if문을 실행한다. 
    $:if (sum === 10){
        alert('합은 10입니다.')
    }
</script>

if문이 실행되는게 확인 된다.

 

만약에 $: 코드에 sum, number 두가지 변수가 포함되어 있다면 sum 혹은 number 변수 둘 중에 하나라도 변경이 된다면 $: 코드가 실행이 된다.

 

 

전체코드

<!--./src/Component/Home/Home.svelte-->
<script>
  //number 변수 선언
  let number = 0;
  let number2 = 0;
  $: sum = number + number2;
  //number가 1씩 더해지는 함수 선언
  function plusNumber() {
    number++;
  }
  //number가 1씩 빼지는 함수 선언
  function minusNumber() {
    number--;
  }
  function plusNumber2() {
    number2++;
  }
  //number가 1씩 빼지는 함수 선언
  function minusNumber2() {
    number2--;
  }

  $: if (sum === 10) {
    alert('합은 10입니다.');
  }
</script>

<h1>Home</h1>
<div class="numbers-container">
  <div class="number-container">
    <h2>number : {number}</h2>

    <button on:click={plusNumber}>Plus</button>
    <button on:click={minusNumber}>Minus</button>
  </div>
  <div class="number-container">
    <h2>number2 : {number2}</h2>
    <button on:click={plusNumber2}>Plus</button>
    <button on:click={minusNumber2}>Minus</button>
  </div>
  <div class="number-container">
    <h2>sum : {sum}</h2>
  </div>
</div>

<style>
  .numbers-container {
    display: flex;
  }
  .number-container {
    margin: 0 20px 0 20px;
  }
</style>

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!
이전 시간에 만들어 뒀던 컴포넌트는 다 지우고 시작하겠습니다!

라우터 생성

npm install svelte-spa-router

npm install 을 해주자.

 

라우터 생성 이전에 컴포넌트를 3개 만들어주자.

Home컴포넌트는 메인페이지, Contact는 두번째 페이지, Header는 모든페이지에서 보여줄 네비바이다.

컴포넌트 내용 작성

Home페이지와 Contact페이지

if 블록은 다음 포스팅에 있다

<!--./src/Component/Home/Home.svelte-->
<h1>Home</h1>


<!--./src/Component/Contact/Contact.svelte-->
<script>
  //params라는 props를 받아온다.
  export let params;
</script>
<!-- if는 이후에 포스팅하겠다. -->
{#if params}
  <h1>{params.test}</h1>
{/if}
<h1>Contact</h1>

모든 페이지에서 보일 Header 컴포넌트

<!--./src/Component/Header/Header.svelte-->
<nav>
  <a href="#/">Home</a>
  <a href="#/Contact1">Contact1</a>
  <!-- App컴포넌트에서 '/Contact2/:test' 여기의 :test
  		가 1234가 된다.-->
  <a href="#/Contact2/1234">Contact2</a>
</nav>

<style>
  a {
    text-decoration: none !important;
  }
</style>
<!--./src/App.svelte-->
<script>
  // Contact 와 Home 컴포넌트를 임포트해준다.
  import Home from './Component/Home/Home.svelte';
  import Contact from './Component/Contact/Contact.svelte';
  import Header from './Component/Header/Header.svelte';
  //페이지 라우팅을 위해서 svelte-spa-router를 임포트해준다.
  import Router from 'svelte-spa-router';
  //path와 라우팅 할 컴포넌트
  const routes = {
    '/': Home,
    '/Contact1': Contact,
    '/Contact2/:test': Contact,
  };
</script>

<main>
  <!-- routes 객체를 라우팅 -->
  <Header />
  <Router {routes} />
</main>

페이지가 잘 보인다!

 

만들어둔 네비게이션에 Home, Contact1, Contact2를 클릭하면

localhost:8080뒤에 path가 변경과 동시에 해당 컴포넌트를 렌더링 하는게 확인된다!!

또한 Contact2에서는 넘겨준 props가 보인다.

 

이제 라우터를 분리해서 서로 다른 페이지에 다른 내용을 보여주는게 가능하게 됐다.

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

'프레임워크\라이브러리 > Svelte' 카테고리의 다른 글

[Svelte] 논리문법 if , else, if else 블록  (0) 2022.01.30
[Svelte]반응형 변수  (0) 2022.01.28
[Svelte] 컴포넌트 및 변수, props  (0) 2022.01.19
[Svelte] 변수  (0) 2022.01.18
[Svelte] Hellow World!  (0) 2022.01.17

컴포넌트 생성 및 렌더링

src 하위의 Component폴더 구조

src 폴더 하위에 Component 폴더를 생성하고 MyName.svelte 파일(컴포넌트)을 만들어 주자.

<!--./src/Component/MyName.svelte-->
<script>
  //MyName 컴포넌트를 import 해 오자.
  import MyName from './Component/MyName.svelte';
</script>

<span>
  JoY
</span>

MyName.svelte 파일안에 span 태그에 JoY를 넣어주고.

<!--./src/App.svelte-->
<script>
  //MyName 컴포넌트를 import 해 오자.
  import MyName from './Component/MyName.svelte';
</script>
<main>
  <!-- MyName 컴포넌트를 뿌려주자!  -->
  <h1>Hello <MyName />!</h1>
</main>

App.svelte 에서 MyName 컴포넌트를 불러와서 보여주면 끝이다!
이때 import 해온 MyName 컴포넌트는 일반적인 태그처럼 사용하면 된다.

MyName 컴포넌트에 적어 둔 JoY라는 이름이 보인다!


 

props 선언 및 바인딩

이제 컴포넌트간의 변수를 전달하기 위해서 props 를 선언해봅시다.

이전 포스트  에서 변수 선언은 배웠었다!

<!--./src/App.svelte-->
<main>
  <!-- MyName 컴포넌트에 name이라는 props를 전달  -->
  <h1>Hello <MyName name="JoY" />!</h1>
</main>

MyName 컴포넌트를 뿌려주는 부분에서 name="JoY"를 넣는다.
여기서 name 은 MyName 컴포넌트에 할당된 props이고
name 이라는 props안에는 "JoY"를 넣어놨다.

<!--./src/Component/MyName.svelte-->
<script>
  //상위 컴포넌트(App.svelte)에서 할당받은 name 이라는 props를 사용하는 법
  //일반적인 변수선언 방법과 비슷하다, let 앞에 export만 적어주면 끝!
  export let name;
</script>

<!-- 보여주는 방법은 일반 변수와 똑같다 -->
<span>{name}</span>

똑같이 잘 나온다!

 

props 를 변수로 선언

변수를 선언하고 props에 변수를 할당해서 다른 컴포넌트에 바인딩을 해보자.

<!--./src/App.svelte-->
<script>
  import MyName from './Component/MyName.svelte';
  //myName 이라는 변수를 선언한다
  let myName = 'JoY';
</script>

<main>
<!-- name 이라는 porps에 myName을 할당해준다. -->
  <h1>Hello <MyName name={myName} />!</h1>
</main>

./src/Component/MyName.svelte 는 변경점이 없다!

 

여기서 잠깐! 코드를 조금 더 간결하게 만드는 방법이 있다. 모든 상황에 다 적용되지는 않지만

꽤 도움이 될거다!

 

 

<!--./src/App.svelte-->
<script>
  import MyName from './Component/MyName.svelte';
  //name 변수와 age 변수를 선언한다.
  let name = 'JoY';
  let age = 29;
</script>

<main>
  <!-- 선언할 props와 할당 할 변수의 이름이 같다면 이렇게만 하면 된다. -->
  <!-- 예시 1 -->
  <!-- <h1>Hello <MyName name = {name} />!</h1>  이렇게 할 필요가 없다. --> 
  <h1>Hello <MyName {name} />!</h1>
  <!-- 예시 2  -->
  <h1>Hello <MyName {age} />!</h1>
</main>​

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

'프레임워크\라이브러리 > Svelte' 카테고리의 다른 글

[Svelte]반응형 변수  (0) 2022.01.28
[Svelte] 페이지 라우팅, svelte-routing  (0) 2022.01.23
[Svelte] 변수  (0) 2022.01.18
[Svelte] Hellow World!  (0) 2022.01.17
[Svelte] 소개  (0) 2022.01.16
svelte 변수 선언

 

<!--./my-svelte-project/src/App.svelte-->
<script> 
//일반적인 Javascript와 똑같다. 
let name = 'JoY'; 
</script> 

<main> 
<!-- {}안에 변수를 넣어주면 된다 --> 
<h1>Hello {name}!</h1> 
</main>

Hello World!  Hello JoY! 로 변경된게 확인된다!

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

'프레임워크\라이브러리 > Svelte' 카테고리의 다른 글

[Svelte]반응형 변수  (0) 2022.01.28
[Svelte] 페이지 라우팅, svelte-routing  (0) 2022.01.23
[Svelte] 컴포넌트 및 변수, props  (0) 2022.01.19
[Svelte] Hellow World!  (0) 2022.01.17
[Svelte] 소개  (0) 2022.01.16

svelte 프로젝트 생성
npx degit sveltejs/template my-svelte-project (my-svelte-project 는 폴더 명)
cd my-svelte-project
npm install
npm run dev

my-svelte-project => 프로젝트 명(폴더 이름)

npm run dev 이후

-Local: http://localhost:8080  (포트는 5000으로 생성되기도 한다)
이부분을 ctrl 클릭 해주거나 복사 후 주소창에 넣으면 된다.

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

'프레임워크\라이브러리 > Svelte' 카테고리의 다른 글

[Svelte]반응형 변수  (0) 2022.01.28
[Svelte] 페이지 라우팅, svelte-routing  (0) 2022.01.23
[Svelte] 컴포넌트 및 변수, props  (0) 2022.01.19
[Svelte] 변수  (0) 2022.01.18
[Svelte] 소개  (0) 2022.01.16

Svelte(스벨트)란?

프론트엔드 프레임워크이다.
svelte 공식 사이트에 따르면

Svelte is a radical new approach to building user interfaces. Whereas traditional frameworks like React and Vue do the bulk of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app.

Svelte는 사용자 인터페이스를 구축하기 위한 급진적인 새로운 접근법이다. 리액트나 뷰와 같은 기존 프레임워크는 브라우저에서 대부분의 작업을 수행하는 반면, Svelte는 앱을 만들 때 발생하는 컴파일 단계로 전환합니다.

출처:https://svelte.dev/

Svelte(스벨트) 처리속도

스벨트는 React, Vue등의 reactive 라이브러리와는 다르게 가상 DOM이 없으며, 이로 인하여 성능적으로 React, Vue에 비하여 속도가 빠르다.

처리 속도
React : 30 ~ 110 MBSvelte : 15 ~ 30 MB

Svelte(스벨트) 코드

스벨트는 리액트 뷰와 같은 리액티브 프레임워크 혹은 라이브러리와 비교했을 때, 코드가 훨씬 간결한 편이다.

리액트:

import React, { useState } from 'react';

export default function ReactCoponent {
	const [a, setA] = useState(1);
	const [b, setB] = useState(2);

	function handleChangeA() {
		setA(a++);
	}

	return (
		<div>
			<button onClick={handleChangeA}>클릭~!</button>
			<p>{a}</p>
		</div>
	);
};

스벨트:

<script>
	let a = 1;
    function handleChangeA(){
    a++;
    }
</script>

<button on:click={a}>클릭~!</button>
<p>{a}</p>

 

같은 결과가 나오는 코드이지만 대충봐도 리액트가 스벨트 코드에 비해서 2배가량 긴게 보인다.

Vue 역시 비슷한 차이가 난다.

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

 

'프레임워크\라이브러리 > Svelte' 카테고리의 다른 글

[Svelte]반응형 변수  (0) 2022.01.28
[Svelte] 페이지 라우팅, svelte-routing  (0) 2022.01.23
[Svelte] 컴포넌트 및 변수, props  (0) 2022.01.19
[Svelte] 변수  (0) 2022.01.18
[Svelte] Hellow World!  (0) 2022.01.17