Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Baseball Game

baseball

Goal

흔하디 흔한 숫자야구를 리액트로 구현하는 연습을 하고 있다.

정말 흔한 기초 알고리즘이지만,

리액트로 구현된 예제 코드가 없기에 스스로가 새로운 것을 만들어본다는 즐거움을 느낄 수 있을 것 같아 이 주제를 선정하였다.


Todo

  • 리액트스럽게 탬플릿을 적용하기
  • input 값엔 중복, 4자리 이하 허용 X,
  • ? 버튼을 누를때마다 ResultList 하위의 Result 컴포넌트를 이용해서 결과창 보여주기
  • 자신에 입맛에 맞게 스타일링 하기 (중요 x)
  • 시작버튼을 통해 number 을 받아와도 되고 처음 화면이 시작할때 받아와도 됩니다. ( 선택 )

State

state = {
number: Arr, // 맞춰야할 숫자 배열
value: Str, // input value
input: [
{
value: Str, // 입력된 값
strike: Num, // strike 개수
ball: Num, // ball 개수
count: Num, // 진행 카운트
finish: Bool, // strike로 판별, 4개면 true
},
],
overlap : Bool, // value값 중복 여부 확인
checkHomerun : Bool, // finish 여부 확인
};

function

startGame() // number 생성,handleChange() // input 입력 값 set, 중복 여부 체크
handleCreate() // input 배열 생성, 4자리가 아니며, 중복숫자 존재하면 return,checkInputData() // value값 체크하여 input 객체 생성
handleKeyPress() // 엔터키 눌렀을때 실행, !4자리, 중복 허용 X
checkOverlap() // value 중복 여부 확인
resetState() // state 초기화
dotCount() // props로 받은 strike,ball의 개수 만큼 ' ● ' 리턴

Component

<App />

부모 컴포넌트, state와 함수들을 정의하고 자식들에게 전달

<BaseballTemplate />

틀, dump Component로 다른 컴포넌트들을 화면에 뿌려주는 역할, 조건부 렌더링

<Form />

input 가지고 value값 컨트롤

<ResultList />

Result 컴포넌트가 담길 틀, input 배열을 기반으로 Result 렌더링, Result생성시 스크롤 하단 고정

<Result />

input값을 시각화

<Homerun />

checkHomerun 값에 따라 <Form /> 대신 렌더링


느낀점

리액트를 배우고 처음 진행해본 프로젝트(?)라 처음엔 걱정 반이었지만, 느낀점은 결국 리액트도 자바스크립트의 라이브러리일뿐, 익숙해지기만 하면 생각보다 쉽게 진행 할 수 있었다. state에 따라 UI를 컨트롤 할 수 있다는 점이 특히 인상적이었다.

배운것

  • 리액트에서 함수 다루기

    사실 이점이 리액트를 처음 입문했을때 가장 어려운 점이었다. 익숙하지 않은 문법을 만나(es6, JSX, ...) 처음엔 막연한 어려움이였지만 결국 자바스크립트라는 점. 사용법만 알면 일반 함수 다루기와 별반 다를바 없었다.

  • state 값에 따른 렌더링

    삼항연산자로 쉽게 조건부 렌더링을 할 수 있다는 점은 제이쿼리로 노가다로 하던 것에 비하면 정말 편했다.

  • 잊고 있던 css

    최근 css를 다룰 기회가 별로 없었기에 잊고 있었다가 진행하면서 다시 상기되었다.

  • react projeck bulid, Github Page에 배포

    처음 리액트 프로젝트를 빌드, 배포

  • 마크다운

    READEME 를 작성하기 위해 써보고 있는데 생각보다 편리하다. 맞게 쓰고 있는진 모르겠지만.

궁금증

  • 부모 컴포넌트에 함수를 다 넣어버리고 자식들에게 뿌려주는게 맞을까?

    정말 작디 작은 프로젝트였지만, 그럼에도 점점 불어나는 App컴포넌트를 보면서 규모가 큰 프로젝트에서는 어떻게 함수와 state를 관리 하는지 궁금해졌다.

  • 어떤 값을 state로 넣어야 하는가

    state.start 경우 처음 스타트 버튼 클릭시에만 사용된다. 하지만 리액트가 state와 props가 변경시에만 리렌더링이 되는 것으로 알고 있어서 state 안에 넣어 놨지만, 다른 방법이 있지 않을까?
    props가 변경되어도 렌더링이 된다. 이것을 이용해서 start를 state 밖에 정의해 props로 넘겨주니 기존과 같이 동일하게 동작한다. (180713)

  • 컴포넌트 생성시 css transition을 주려면 어떻게 해야할까?

    아마 ' Sass '나 ' styled-components '를 사용하면 될거 같긴 한데 처음 개발할때 고려하지 않은 점이 아쉽다.


NEXT

1. Sass, styled-components 등 css 모듈 이용해보기

2. API 다뤄보기

3. 조금 더 큰 규모의 프로젝트


도움받은 곳

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages