FRONT 113

[리액트] 도서 검색 사이트 만들기

리액트로 도서 검색 사이트 만들기 기능 -책 제목, 출판사, 저자 별 단어 검색 -책 클릭시 상세정보 나오기 -페이지 클릭시 해당 페이지로 이동, 맨 끝 페이지/ 맨 앞 페이지 이동 -회원가입, 로그인 기능 리액트로 해본 첫 프로젝트였다. 백엔드 분들이랑 다른 프론트엔드 분들이랑 같이 작업했는데 백엔드에서 준 api 책 정보들을 프론트에서 받아 띄우는 식으로, 출판사, 저자, 책 이름별 검색시 필터링해 검색 단어가 포함된 책을 한 페이지 안 책의 개수만큼 렌더링하게 해줬다. 그리고 책 클릭 시 책 상세 정보 api를 받아 보여줬다. 페이징 처리 하는 부분에서 리액트에 원래 내장된 페이징 기능을 그대로 쓰지 않고 로직을 직접 짜서 했는데, 이 부분이 가장 어려웠던거 같다. 회원가입 부분에서는 post 방식..

FRONT/REACT 2021.09.05

[React] 노마드코더 영화 웹 서비스 만들기(4) - github에 배포하기

터미널에 npm i gh-pages 를 입력하여 gh-pages를 설치한다. gh-pages는 github에 웹페이지를 업로드하는 것을 허가해주는 모듈이다. git remote -v 를 입력하면 현재 깃허브 프로젝트 도메인을 확인할 수 있다. package.JSON으로 가서 맨 밑에 "homepage" : "https://{github username}.github.io/{project name}/" 을 추가한다. 그리고 package.JSON의 "script"에 마지막 두 줄을 추가한다. "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "reac..

FRONT/REACT 2021.08.25

[React] 노마드코더 영화 웹 서비스 만들기(3) - Rendering

Rendering Movies.data.data.movies로 영화 데이터 목록들을 확인한다. es6를 사용해 이렇게 단축시킬 수 있다. getMovies = async() => { const {data : {data : {movies}}} = await axios.get("https://yts-proxy.now.sh/list_movies.json"); console.log(movies); } 이제 이 movies를 state안에 넣어야 한다. this.setState({movies : movies}); 를 최신버전 자바스크립트를 사용해 이렇게 짧게 표현한다. getMovies = async() => { const {data : {data : {movies}}} = await axios.get("http..

FRONT/REACT 2021.08.25

[React] 노마드코더 영화 웹 서비스 만들기(2) - Fetch API

Fetching Movies from API Axios 일반적으로 자바스크립트에서 data를 fetch하는 방식은 fetch()를 사용하는 것이지만 여기선 Axios를 사용한다. npm install axios Axios를 설치한다. API 가져오기 https://yts-proxy.now.sh/list_movies.json API를 가져올 YTS라는 사이트는 불법 토렌트 사이트라 도메인을 수시로 바꾸기 때문에 API URL 이 계속 변경된다. 그래서 니콜라스가 깃허브에 올린 YTS 사이트를 추적하는 주소를 사용한다. JSONView 라는 크롬 확장프로그램을 설치해서 보면 보기 좋게 바꿔준다. import React from "react"; import axios from "axios"; class App..

FRONT/REACT 2021.08.25

[React] 노마드코더 영화 웹 서비스 만들기(1) - 사전 준비

사전 준비 import React from "react"; class App extends React.Component { state = { isLoading: true }; render() { const { isLoading } = this.state; return {isLoading ? "Loading..." : "Ready"} } } export default App; mount(생겨나는 것) 되자마자 isLoading은 기본적으로 true 값을 갖는다. 삼항연산자를 사용해 isLoading이라면 "Loading" 텍스트를, 그렇지 않을 경우에는 "Ready"를 보여준다. 여기서 처음에 render()를 할 때 호출되는 life cycle 메서드는 componentDidMount()이다. impor..

FRONT/REACT 2021.08.25

[JS] 바닐라 자바스크립트 벽돌깨기 게임

실행 화면 기능 캔버스로 공, 패들, 벽돌 생성하기 키보드 이벤트 핸들러로 패들 이동시키기 공 이동 애니메이션 구현 벽돌과 공이 부딪혔을 때 벽돌 보이지 않게 하고 score 올리기 공이 바닥과 닿았을 때 live 하나씩 줄기 live가 다 줄었을 때 게임 오버, 게임 다시 시작 코드 const rulesBtn = document.getElementById("rules-btn"); const closeBtn = document.getElementById("close-btn"); const rules = document.getElementById("rules"); const canvas = document.getElementById("canvas"); const ctx = canvas.getContext(..

FRONT/JAVASCRIPT 2021.08.25

[Javascript] 애니메이션 구현 - requestAnimationFrame

requestAnimationFrame() 자바스크립트로 애니메이션을 구현할 때는 1초에 60프레임을 찍어내면 된다. 사람은 1초에 60개의 프레임을 볼 수 있기 때문이다. 16.6ms(1000ms/60frame)마다 프레임을 찍어내면 된다. setInterval로도 이를 구현할 수 있지만, setInterval이나 setTimeout은 프레임을 신경쓰지 않고 동작하기 때문에 애니메이션 코드를 실행하는데 16.6ms가 넘게 걸린다면 16.6ms동안 프레임을 찍어내지 못했기 때문에 화면이 끊기는 듯한 현상이 발생할 수 있다. 프레임 시작시간에 맞춰 함수가 시작되는 것이 아니라 중간쯤부터 시작해 프레임 시간을 초과해버린다. requestAnimationFrame을 사용하면 프레임 생성 시작시간에 맞춰 애니메..

FRONT/JAVASCRIPT 2021.08.15

[JS] 바닐라 자바스크립트 무한 스크롤링(infinite scrolling)

스크롤링 window.addEventListener("scroll", () => { const { scrollTop, scrollHeight, clientHeight } = document.documentElement; if (Math.round(scrollHeight - scrollTop) { loading.classList.remove("show"); setTimeout(() => { page++; showPosts(); }, 300); }, 1000); } setTimeout: 일정시간 후에 함수를 실행한다. 로딩 화면을 띄우고 난 후 setTimeout 함수로 1초 후에 로딩 화면을 지우고, 또다른 setTimeout함수를 실행해 0.3초 후에 다른 포스트들을 띄운다. Post 보여주기 async..

FRONT/JAVASCRIPT 2021.08.12

[React] State 사용하기

노마드코더 - ReactJS로 영화 웹서비스 만들기 State는 보통 동적 데이터와 함께 작업할 때 만들어진다. import React from "react"; import PropTypes from "prop-types"; class App extends React.Component { state = { count: 0, }; add = () => { this.setState((current) => ({ count: current.count + 1 })); }; minus = () => { this.setState((current) => ({ count: current.count - 1, })); }; render() { return ( The number is: {this.state.count} Ad..

FRONT/REACT 2021.08.11