inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

깃 액션 활용

해결됨

React 기반 Gatsby로 기술 블로그 개발하기 v2

name: Deploy Blog on: push: branches: develop jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 # 원하는 Github Secrets을 불러와 env 파일을 생성해줍니다. - name: Generate env file run: | echo "CONTENTFUL_ACCESS_TOKEN=$CONTENTFUL_ACCESS_TOKEN" >> .env echo "CONTENTFUL_SPACE_ID=$CONTENTFUL_SPACE_ID" >> .env env: CONTENTFUL_ACCESS_TOKEN: ${{ secrets.CONTENTFUL_ACCESS_TOKEN }} CONTENTFUL_SPACE_ID: ${{ secrets.CONTENTFUL_SPACE_ID }} - name: Deploy gatsby uses: enriikke/gatsby-gh-pages-action@v2 with: access-token: ${{ secrets.DEPLOYMENT_ACCESS_TOKEN }} deploy-branch: main gatsby-args: --verbose develop 브런치에서 위 코드를 작성하고 git push origin develop 을했는데 액션에 동작을 안합니다. https://github.com/Choi-jeonghoon/Jeong-hoon.github.io/actions/new

  • react
  • typescript
  • 블로그
  • gatsby
최정훈 댓글 3 좋아요 0 조회수 401

Link태그와 useRouter

해결됨

[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)

혹시 Next.js에서 Link태그와 useRouter를 제공하고 있는데 서로 차이점이 있을까요?? 이미지나 버튼이 있으면 거기에 onClick 달고 라우터 쓰고 있긴한데 이미지나 버튼에 링크를 감싸버리면 뭔가 이상할 것 같아서 어떤식으로 쓰면 좋을까요 <Link href="/" ><Image ... /></Link> <Image ... onClick={()=>router.push("/")} />

  • firebase
  • next.js
  • tailwind-css
  • react-query
  • supabase
___ 댓글 1 좋아요 0 조회수 245

code 강조가 안됨니다..

해결됨

React 기반 Gatsby로 기술 블로그 개발하기 v2

코드블럭 테스트 language::typescript export const { auth, signIn, signOut, handlers } = NextAuth({ 등등을 존재하는데 아래와같이 코드는 작성했는데 코드 강조가 안되고있습니다. 뭐가문제일까요? import React from 'react' import { ContentfulRichTextGatsbyReference, renderRichText, } from 'gatsby-source-contentful/rich-text' import { getImage } from 'gatsby-plugin-image' import { NodeRenderer, Options } from '@contentful/rich-text-react-renderer' import { BLOCKS, INLINES, MARKS } from '@contentful/rich-text-types' import { Blockquote, Heading, Image, HorizontalRule, OrderedList, UnorderedList, Link, Code, } from './node' export const HEADERS = [ BLOCKS.HEADING_1, BLOCKS.HEADING_2, BLOCKS.HEADING_3, ] as const const CODE_METADATA_REGEX = /^language::(\w+)/ const options: Options = { renderMark: { [MARKS.CODE]: text => { const isBlock = !!text && CODE_METADATA_REGEX.test(text.toString()) if (!isBlock) return <Code>{text}</Code> else return ( <Code isBlock className={`language-${ CODE_METADATA_REGEX.exec(text.toString())?.[1] }`} > {text.toString().replace(CODE_METADATA_REGEX, '').trimStart()} </Code> ) }, }, renderNode: { ...HEADERS.reduce<{ [block: string]: NodeRenderer }>((nodes, header) => { nodes[header] = (node, children) => ( <Heading type={header}>{children}</Heading> ) return nodes }, {}), [BLOCKS.OL_LIST]: (_node, children) => ( <OrderedList>{children}</OrderedList> ), [BLOCKS.UL_LIST]: (_node, children) => ( <UnorderedList>{children}</UnorderedList> ), [BLOCKS.HR]: () => <HorizontalRule />, [BLOCKS.QUOTE]: (_node, children) => <Blockquote>{children}</Blockquote>, [BLOCKS.EMBEDDED_ASSET]: node => { const { gatsbyImageData, description } = node.data.target const image = getImage(gatsbyImageData) if (image) return <Image image={image} alt={description} /> }, [INLINES.HYPERLINK]: (node, children) => ( <Link href={node.data.uri as string} target="_blank" rel="noopener noreferrer" > {children} </Link> ), }, } export default function useRenderRichText({ raw, references, }: Queries.ContentfulPostContent) { if (!raw) return null return renderRichText( { raw, references: references as unknown as ContentfulRichTextGatsbyReference[], }, options, ) } import React from 'react' import { GatsbyBrowser } from 'gatsby' import Layout from './src/components/common/Layout' import 'prismjs/themes/prism-tomorrow.min.css' export const wrapPageElement: GatsbyBrowser['wrapPageElement'] = ({ element, props, }) => { return <Layout {...props}>{element}</Layout> } import React from 'react' import { GatsbyBrowser } from 'gatsby' import Layout from './src/components/common/Layout' import 'prismjs/themes/prism-tomorrow.min.css' export const wrapPageElement: GatsbyBrowser['wrapPageElement'] = ({ element, props, }) => { return <Layout {...props}>{element}</Layout> } import React, { useEffect } from 'react' import styled from 'styled-components' import { TPostBodyProps } from '../../types/PostBody' import Prism from 'prismjs' import 'prismjs/components/prism-typescript' import useRenderRichText from '../../hooks/useRenderRichText' const Wrapper = styled.div` position: relative; display: grid; grid-template-columns: 1fr 220px; grid-gap: 30px; justify-content: space-between; align-items: flex-start; padding-top: 100px; ` const Content = styled.div` overflow: auto; display: flex; flex-direction: column; gap: 100px; font-size: 16px; line-height: 2; word-break: break-word; ` export default function PostBody({ content }: TPostBodyProps) { const richText = useRenderRichText(content) useEffect(() => { Prism.highlightAll() }, []) return ( <Wrapper> <Content> <div id="content">{richText}</div> {/* 댓글 컴포넌트가 들어갈 자리 */} </Content> {/* 플로팅 목차 컴포넌트가 들어갈 자리 */} </Wrapper> ) }

  • react
  • typescript
  • 블로그
  • gatsby
최정훈 댓글 3 좋아요 0 조회수 398

localhost:8080 접속 불가

미해결

[React 1부] 만들고 비교하며 학습하는 React

안녕하세요 선생님 리액트 프로젝트를 본격적으로 하기 위해 npm i -> npm start로 localhost:8080 에 접속해야 하는데 자꾸 오류가 나오네요 제가 군대에서 수업 듣고 있어서 vscode는 설치를 못하고 대안으로 무료클라우딩 사이트 replit을 이용중입니다. 폴더구조 정확히 맞게 했고 100%그대로 따라 옮겼는데 왜 이런 오류가 나오는지 모르겠습니다. 어떻게 해결해야 될까요? 공부해야 하는데 여기에 막혀서 하루종일 시간 썼네요 ㅠ 답변주시면 감사하겠습니다!!

  • react
  • mvc
이재은 댓글 1 좋아요 1 조회수 313

File 처리 관련 궁금사항

해결됨

[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)

안녕하세요, Drag & Drop 강의 도중 궁금한 점이 생겨 질문드립니다. File Upload 처리 같은 경우는, SupaBase가 아니어도, 보통은 이러한 방식으로 File 객체를 전달하는 것이 맞을까요?? 어떤 방법이 조금 더 일반적인지 궁금합니다!

  • firebase
  • next.js
  • tailwind-css
  • react-query
  • supabase
김용민 댓글 1 좋아요 0 조회수 224

최근검색어 3 풀이에서

미해결

[React 1부] 만들고 비교하며 학습하는 React

안녕하세요 선생님 수업 잘듣고 있습니다. 다소 수준이 높은 수업이라 조금 헤매고 있지만요.. 최근 검색어 3에서 2분 41초 경에 store js에서 15번째 줄 search(keyword) { this.addHistory(keyword); return this.storage.productData.filter((product) => product.name.includes(keyword) ); } 이 부분이 있는데요. 이 부분때문에 store의 search가 addHistory를 호출하고 상태변화가 이루어질 수 있는데 (addhistory 내용만 수정하면 main.js의 코드를 수정안해도 목표로 하는 최근 검색어에 목록 추가를 할 수 있어서요) 굳이 4분 1초 경에 main.js의 search에서 setstate를 건드리시는 이유가 무엇인가요? 이미 상태변화가 store.js에서 작성한 코드 때문에 이루어지고 있기때문에 다소 역할이 중복된 코드가 아닌가해서요 답변주시면 감사하겠습니다

  • react
  • mvc
이재은 댓글 1 좋아요 1 조회수 214

Next 14 사용해도 될까요?

미해결

[리뉴얼] React로 NodeBird SNS 만들기

궁금합미다

  • react
  • redux
  • node.js
  • express
  • next.js
ddabong 댓글 1 좋아요 0 조회수 468

value 오류 문의

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래 오류가 자꾸 뜨는데 이유를 모르겠습니다... input 태그에 텍스트도 써지지 않습니다. onchange2 도 이어서 작성하면 오류가 발생하여 지워버렸습니다ㅠㅠ Warning: You provided a value prop to a form field without an onChange handler. This will render a read-only field. If the field should be mutable use defaultValue . Otherwise, set either onChange or readOnly .

  • javascript
  • react
  • node.js
suhyunk519 댓글 2 좋아요 0 조회수 373

감정일기장 응용공부

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

마지막 주차에서 감정일기장을 주차별로 된 것으로 만들어보라고 하셔서 만들기를 시도했습니다. 그러나 도저히 어떻게 해야할지 막막해서 감정일기장 코드들을 챗지피티에 복붙하고 주차별로 만들어달라고 했고 완성했습니다(챗지피티가 알려준 코드들은 모두 이해됩니다) 이렇게 학습하는 것이 과연적절할까요?? 또한 감정일기장을 주차별로 만드는것외에 감정일기장을 어떤식으로 변형하면 좋을지 궁금합니다!!

  • javascript
  • react
  • node.js
peter 댓글 1 좋아요 0 조회수 161

강의자료 (보일러플레이트) 다운로드 관련 질문

해결됨

[React / VanillaJS] UI 요소 직접 만들기 Part 2

강의 커리큘럼을 보면 "강의자료 (완성본)"과 "강의자료 (보일러플레이트)" 다운로드를 구분해 두셨는데, 다운로드는 "강의자료 (완성본)"만 만 받게 되어 있는거 같습니다. 혹시 보일러플레이트 강의자료는 아직 준비가 되지 않은것일까요? 완성본 README.md 에 있는 `git clone https://github.com/fe-ui-study/ui-study.gi t `도 Repository를 찾지 못하고 있습니다.

  • react
  • typescript
  • dom
  • ui
  • vanilla-js
working.zima 댓글 1 좋아요 0 조회수 277

router 이동 질문 드립니다.

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 열심히 강의 듣고 있습니다. ... react에서 router 이동에 궁금한거 잇어서 질문 드려요 1 root 의 라우터에는 TodoIndex와 ProductsIndex 2개의 페이지가 있습니다. ............ 생략 .............. { path: "todo", element: ...<TodoIndex/>..., children: todoRouter() }, { path: "products", element: ... <ProductsIndex/>..., children: productsRouter() } 2. TodoIndex의 child은 todoRoter이고 add의 TodoAdd와 mdify의 TodoModify가 있습니다. { path: "add", element: ...<TodoAdd/>... }, { path: "modify/:tno", element: ...<TodoModify/>... } ProductsIndex의 child은 productsRouter이고 add의 ProductList와 mdify의 ProductModify가 있습니다. 현재 ../products/add 에 있다고 했을때 add 페이지에 있는 버튼을 누르면 ../todo/add 로 점프해서 이동 하려면 어떻게 navigate 해야되나요? todo/add에서 todo/modify 이런식의 같은 폴더 레벨이면 쉽게 이동되던데 ...

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 1 조회수 183

Product 컨트롤러 api 결과값 리턴 질문

미해결

코드로 배우는 React 19 with 스프링부트 API서버

상품 등록이나 수정을 하고나서 return Map.of("result", "Success") 이렇게 리턴해주셨는데 실무에서 이런 방식을 많이 사용하나요 아니면 교육목적이기 때문에 조금 러프하게 하신건가요?? 이번 강의를 보고 실무와 가깝게 프로젝트를 진행하고 싶은데 이렇게 Map에 간단하게 리턴할지 아니면 api마다 매번 ResponseEntity에 Http Status Code 담아 리턴해야 할지 기준을 모르겠습니다. 제 목적에 맞게 하려면 어떤 방식으로 api 결과를 리턴해줘야 할까요??

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 183

Like 검색으로 구현하려면 어떻게 하면 될까요?

미해결

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

강의대로 구현하니 제목과 설명의 full text를 입력했을 때만 검색이 되는데요Like 검색으로 구현하려면 어떻게 하면 될까요?

  • react
  • redux
  • node.js
  • 웹앱
  • mongodb
jy.park92 댓글 1 좋아요 0 조회수 286

코드 제공 되나요?

미해결

React Router 완전 정복

코드 제공 됩니까?

  • react
  • spa
  • react-router
  • react-router-dom
Seung Sik Jang 댓글 1 좋아요 0 조회수 140

createRoot도 잘 했는데 에러가 나네요

해결됨

처음 만난 리액트(React)

createRoot도 잘 되어있고 하는데도 이 에러가 뜹니다.. import Clock from "./chapter_04/Clock"; const root = ReactDOM.createRoot(document.getElementById("root")); setInterval(() => { root.render( <React.StrictMode> <Clock /> </React.StrictMode> ); }, 1000); reportWebVitals(); ERROR react_dom_client__WEBPACK_IMPORTED_MODULE_1__.render is not a function TypeError: react_dom_client__WEBPACK_IMPORTED_MODULE_1__.render is not a function at http://localhost:3000/static/js/bundle.js:114:49

  • HTML/CSS
  • javascript
  • react
leeso4567 댓글 2 좋아요 1 조회수 439

9.1 강의에서 생긴 servercomponent 변수

해결됨

Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14)

9.1장에서 user.action.ts의 getUser 함수에 serverComponent라는 속성이 갑자기 생겨났는데 이거에 대한 설명이 필요한 것 같습니다.

  • react
  • 클론코딩
  • next.js
  • supabase
Malik KIM 댓글 2 좋아요 2 조회수 304

메인글자수정...

해결됨

만들면서 배우는 리액트 : 기초

MainCard에 처음 나오는 이미지에 써지는 글자의 스타일은 어디서 수정을 해줘야 하는걸까요? 찾아서 나름 해봤는데 전혀 변경이 안되어서요 input에 넣은 글자가 이미지 위에 나올때 ...그 글자의 크기,색상,폰트 등의스타일은 어디서 바꾸어야 하는지...

  • javascript
  • react
gangsugi 댓글 3 좋아요 1 조회수 304

파일 업로드 관련 질문

미해결

코드로 배우는 React 19 with 스프링부트 API서버

[파일 업로드 설정과 확인] 강의에서 DB에 아주 중요한게 아니라면 성능적인 부분때문에 DB에 파일을 저장하면 안된다고 하셨습니다. 클라우드를 이용하는게 일반적이라고 생각합니다만 한가지 궁금한게 있습니다. 만약 게시글이라는 엔티티에 대표 사진이 딱 한장 들어갈 수 있다고 한다면 아래와 같은 순서로 구현할 수 있겠다는 생각이 들었습니다. 이런 방법에 대해 어떻게 생각하시나요?? 애플리케이션 단에서 이미지 등록 -> 이미지 base64 인코딩 -> 인코딩 된 긴 문자열을 압축 -> 압축된 문자열을 RDB(MYSQL) 게시글 테이블에 게시물 대표이미지 (longtext 형)에 저장. 조회할때는 애플리케이션 단에서 별도로 압축된 문자를 원래 인코딩 된 문자열로 디코딩하는 로직 필요하겠지만 비용이 크지 않다고 생각했습니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 248

Presigned URL 사용시 데이터베이스 저장 시점

미해결

이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)

데이터베이스 저장 시점 현재 이미지 업로드 관련해서 프로젝트를 진행하고있는데, 이미지를 불러오기 위해 별도의 데이터베이스 저장이 필요해서 클라이언트에서 presigned URL을 사용하여 이미지 업로드가 완료된 후, 서버에 이미지 이름과 부가적인 정보를 보내주면 서버가 이를 데이터베이스에 저장하는 방식으로 구현하는게 맞을까요??

  • react
  • node.js
  • aws
  • mongodb
  • express
  • lambda
지원 댓글 1 좋아요 0 조회수 349

Github Actions 배포 이후 ReadMe만 보이는 에러

해결됨

React 기반 Gatsby로 기술 블로그 개발하기 v2

깃허브 액션으로 배포하는 강의 자료부분 하는 중인데 build가 완료돼도 배포된 사이트에선 리드미 파일만 보이는데 무슨 문제인지 잘 모르겠습니다ㅠ https://github.com/jihun-24k/jihun-24k.github.io

  • react
  • typescript
  • 블로그
  • gatsby
김지훈 댓글 1 좋아요 0 조회수 389

인기 태그

인프런 TOP Writers

주간 인기글