묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결실무에 바로 적용하는 스토리북과 UI 테스트
tailwind 4.x 버전 변경된 CSS 추출(?) 커맨드
강의에 있는 커맨드가 사용되지 않아서 이곳 저곳 돌아다니다가 발견했네요 npx @tailwindcss/cli -i ./src/index.css -o ./src/output.css --watch
-
미해결실무에 바로 적용하는 스토리북과 UI 테스트
스토리북 테마에 대해 질문 드립니다.
퍼블리셔로 일하고 있는데..설정하는 부분이 녹록치 않아 이렇게 질문드립니다.제가 하고자 하는 것은 라이트,다크 테마시 주요 컬러와 기타 색상등을 변경하려고 하는데요..css 변수 처리 예는 아래와 같습니다./* root 라이트테마 기본 변수 */ :root { --text-color: #000; --bg-color: #fff; } /* 다크 테마 기본변수 */ .dark { --text-color: #fff; --bg-color: #000; }테마 설정은 다음과 같이 진행했습니다.preivew.tsx 에 decorators 배열로 추가함.import { withThemeByClassName } from '@storybook/addon-themes';이렇게 하니까 dark 클래스는 잘 붙고 있는데..문제는 상단 패널에 기본적으로 레이어로 떠서 클릭할수 있는 라이트,다크테마는 컴포넌트 화면의 배경컬러가 변경되지만 제가 애드온한 것은 토글버튼은 라이트,다크버튼이 나오더라구요.. 근데 문제는 애드온 한것은 클래스만 제어되고 있고 컴포넌트의 배경컬러를 제어하려니까 잘 안되더라구요..상단 기본 패널의 테마설정 부분과 애드온 한 부분의 싱크가 안맞는 부분도 있구요..이것을 어떤 식으로 처리해야하는지..조언을 구하고 싶습니다.강의 잘 듣고 있습니다. 감사합니다.
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
테일윈드를 안쓰고 스타일 컴포넌트만 사용하는 환경에서는요?
테일윈드를 안쓰고 스타일 컴포넌트만 사용하는 환경에서는요? 테일윈드로 환경셋팅을 하는게 맞을까요??
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
[질문 x 공유용] tailwind v4.0 으로 강의랑 다를 때 (import 다름, tailwind.config.js 없어짐 등)
강의랑 다른 부분 1. tailwind 설치 커맨드: 커맨드가 간단해졌어요.npm install tailwindcss @tailwindcss/vite 강의랑 다른 부분 2. vite.config.ts : 이제 ***.tsx, ***.jsx 를 일일히 넣지 않아도 됩니다.import { defineConfig } from 'vite' import tailwindcss from '@tailwindcss/vite' export default defineConfig({ plugins: [ tailwindcss(), ], }) 강의랑 다른 부분 3. @import ~ 3줄 @import "tailwindcss";한 줄로 초간단해짐.. 강의랑 다른 부분 4. tailwind.config.js: config.js 가 없어졌습니다. (자세한 내용: https://tailwindcss.com/blog/tailwindcss-v4#css-first-configuration)대신 index.css 에 아래와 같은 형식으로 theme 을 적용할 수 있습니다.@import 'tailwindcss'; @theme { --color-primary: #1d2745; --color-secondary: #1de5d4; --color-tertiary: #1d2745; --color-white: #ffffff; --color-mono100: #f1f1f1; --color-mono200: #bebebe; --color-mono300: #d6d7d9; --color-error: #d01e1e; --color-social: #395997; }
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
react-toastify 를 storybook에 출력 시키기
react-toastify를 사용하시는 경우 storybook에서 출력하는데 곤란함을 겪는 분들이 계실 거 같아 자문자답 올려둡니다! package.json "react-toastify": "^10.0.4" "@types/react": "^18.3.12", "@storybook/react": "^8.3.0", .storybook/preview.tsx ( ts가 아닌 tsx )17버전 이상이라 import React from 'react'가 안되서 아래와 같이 @jsxImportSource 추가 /** @jsxImportSource react */ import type { Preview } from '@storybook/react'; // react-toastify 관련 import import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; Modal.setAppElement('#storybook-root'); const preview: Preview = { parameters: { actions: { argTypesRegex: '^on[A-Z].*' }, controls: { matchers: { color: /(background|color)$/i, date: /Date$/i, }, }, }, decorators: [ Story => ( <> <Story /> <ToastContainer position="bottom-right" autoClose={3000} hideProgressBar={false} newestOnTop={false} closeOnClick rtl={false} pauseOnFocusLoss draggable pauseOnHover theme="light" /> </> ), ], }; export default preview;tsconfig.json{ "compilerOptions": { "jsx": "react-jsx", } }
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
react에서 modal & portal 사용시 에는 어떻게 작성해야될까요
개요react-modal 라이브러리를 사용하고 있다가 Storybook에 등록하여 관리하고 싶어서 작성하는데 아래와 같이 컴포넌트를 작성했다가 스토리북 화면에서에러가 발생하였습니다. 강사님께서는 Modal의 경우 어떤식으로 해서 Storybook을 동작가능하게 하셨는지 궁금합니다. 현재는 Modal.setAppElement('body')로 처리하여 임시로 실행되게 하였으나, 더 좋은 다른 방법이 있을지 질문드립니다.import Modal from 'react-modal'; Modal.setAppElement('#root'); // 모달이 열린 상태에서도 접근성을 보장하기 위해 필요합니다. const BaseModal: React.FC<BaseModalProps> = ({ Missing Context/Providers: You can use decorators to supply specific contexts or providers, which are sometimes necessary for components to render correctly. For detailed instructions on using decorators, please visit the Decorators documentation.
-
미해결실무에 바로 적용하는 스토리북과 UI 테스트
tsconfig
meta 객체의 프로퍼티에서 tsconfig.json에 포함되어 있지 않습니다. 라고 에러가 뜨는데 어떤 설정을 해주어야할까요?tsconfig.json{ "files": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" } ] }tsconfig.app.json{ "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, "jsx": "react-jsx", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, }, "include": ["src"] } tsconfig.node.json{ "compilerOptions": { "target": "ES2022", "lib": ["ES2023"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, }, "include": ["vite.config.ts"] }
-
미해결실무에 바로 적용하는 스토리북과 UI 테스트
vite 초기설정
안녕하세요 개발자님.vite초기설정할때 "Select a variant" 설정에서typescript+ SWC대신 typescript를 하는 이유가 뭔가요?최근에 vite를 사용하면서 검색을 한 결과 보통 react에서 사용하는 babel보다 c로 만들어진 SWC가 더 빨라서 좋다고 들어서 이전에는 typescript + SWC를 선택하여 프로젝트를 하였는데 그냥 typescript를 선택한 이유가 있나요?현업에서는 주로 어떤걸 선택하나요? 추가로, 현업에서는 보통 번들러를 vite를 사용하나요?현재 컴퓨터학부에 진학중인 3학년이라 궁금한 점이 많고 현업에선 어떻게 (번들러 등)쓰이는지 궁금하네요!아는 현업자 선배분께선 보통 vite는 아직 안정하지가 않아서 다른 번들링 방법을 사용하다고 들었는데 개발자님의 생각이 궁금합니다. 말이 길어져서 죄송합니다. 긴 글 읽어주셔서 감사합니다!
-
미해결실무에 바로 적용하는 스토리북과 UI 테스트
스토리 내 args에서 에러가 발생합니다.
안녕하세요, 일단 이해하기 쉽게 강의 만들어주셔서 감사드린다는 말씀드리고 싶습니다.현재 next app router에서 진행중인데요, primary라는 스토리를 생성하고, 그 내에 사용하는 Props들을 추가하였습니다. 다만 강의(DefaultTextField 컴포넌트 생성과 스토리 생성 부분)에서는 onIconClick() 이라던지, onChange와 같은 함수들에 대해서는 스토리에 추가를 하지 않아도 에러가 뜨지 않던데, 저는 args 부분에 에러 라인이 그어지더라구요. 혹시 이 이유 알 수 있을까요? 감사합니다!
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
Nextjs에서 tailwind를 사용할 때
Tailwind 꿀팁 알려주시면서 사전에 정의한 css들을 nextjs 프로젝트를 사용하면 tailwind를 지원하니 빌드할 때 스타일을 포함 안해도될 것 같다 라고 말씀하신 부분이 잘 이해가 안되어서 질문 드립니다...ㅜㅜ 어떻게 활용할 수 있다는 것인지 궁금합니다!
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
제공해주시는 Figma 색상 코드가 강의와 달라 글 남깁니다!
Figma에서 mono100 의 색상코드가 #f1f1f1 이 아닌 #f52c50 으로 설정되어 있습니다. 확인부탁드립니다...!
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
Visual Test
스토리북 자체에 Action 탭 오른쪽에 Visual Test라는 탭이 있는걸 확인했습니다.<Chromatic을 활용한 Visual 테스트> 강의와 같은 내용을 기능인가 해서 여쭤봅니다! 같은 기능인데 좀 더 확인하기 쉽게 탭으로 스토리북에서 제공하고있는건가 해서요..ㅎㅎㅎ
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
NavigationBar 배경색
NavigationBar 강의를 시청했습니다.배경색을 작성하지 않으시던데 그렇게 하신 이유가 있으신가요?
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
defaultValue 질문 드립니다!
IconButton의 경우 alt에만 defaultValue를 작성하시던데 iconPath는 작성하지 않으시는 특별한 이유가 있으신가요?어떤 기준으로 defaultValue 작성 여부를 판단하시는지도 궁금합니다!
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
svg를 public 말고 src>assets안에 넣는다면 import를 어떻게해야하나요?
현재는 public에서 아이콘을 가져오는데 assets에 가져올때는 어떻게 하나요? import type { Meta, StoryObj } from "@storybook/react"; import { IconButton } from "../../components/IconButton"; const meta = { title: "Buttons/IconButton", component: IconButton, parameters: { layout: "centered", }, tags: ["autodocs"], argTypes: { alt: { control: "text", description: "아이콘의 대체 텍스트" }, iconPath: { control: "text", description: "아이콘의 경로", defaultValue: "", }, onClick: { action: "clicked", description: "아이콘 클릭 시 호출되는 함수" }, }, } satisfies Meta<typeof IconButton>; export default meta; type Story = StoryObj<typeof meta>; export const Default: Story = { args: { alt: "아이콘", iconPath: "ic-delete-dark.svg", onClick: () => {}, }, };
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
index.tsx 빌드 오류
안녕하세요 강의에 사용된 버전이나 pnpm을 사용하는 등 다른게 진행한 부분이 있습니다만 빌드할때 에러가 나는데 이해가 안되는 부분이 있어 질문드립니다.pakage.json "name": "@twosday/ui", "description": "Design System for twosday", "private": false, "publishConfig": { "access": "public" }, "files": [ "dist" ], "main": "dist/index.umd.js", "module": "dist/index.es.js", "types": "dist/index.d.ts", "exports": { ".": { "import": "./dist/index.es.js", "require": "./dist/index.umd.js", "types": "./dist/index.d.ts" }, "./styles": { "import": "./dist/styles/index.css" } }, "version": "0.0.1", "type": "module", "license": "MIT",import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin"; import svgr from "vite-plugin-svgr"; import path from "path"; import dts from "vite-plugin-dts"; import { viteStaticCopy } from "vite-plugin-static-copy"; // https://vitejs.dev/config/ export default defineConfig({ resolve: { alias: { "@": path.resolve(__dirname, "src"), }, }, plugins: [ react(), vanillaExtractPlugin({ identifiers: ({ hash }) => `css_${hash}`, }), svgr(), dts(), viteStaticCopy({ targets: [{ src: "src/index.css", dest: "" }], }), ], build: { lib: { name: "@twosday/ui", entry: path.resolve(__dirname, "src/index.tsx"), fileName: (format) => `index.${format}.js`, }, rollupOptions: { external: ["react", "react-dom"], output: { globals: { react: "React", "react-dom": "ReactDOM", }, }, }, sourcemap: true, emptyOutDir: true, }, }); grs04@BOOK-NN36R5QM7J MINGW64 ~/Desktop/sideproject/my-story-book (main) $ pnpm build > @twosday/ui@0.0.1 build C:\Users\grs04\Desktop\sideproject\my-story-book > tsc -b && vite build vite v5.3.5 building for production... src/index.tsx:1:38 - error TS6142: Module './component/LoginForm' was resolved to 'C:/Users/grs04/Desktop/sideproject/my-story-book/src/component/LoginForm.tsx', but '--jsx' is not set. 1 export { default as LoginForm } from "./component/LoginForm"; ~~~~~~~~~~~~~~~~~~~~~~~ src/index.tsx:2:35 - error TS6142: Module './component/Button' was resolved to 'C:/Users/grs04/Desktop/sideproject/my-story-book/src/component/Button.tsx', but '--jsx' is not set. 2 export { default as Button } from "./component/Button"; ~~~~~~~~~~~~~~~~~~~~ ✓ 15 modules transformed. [vite:dts] Start generate declaration files... dist/style.css 0.18 kB │ gzip: 0.15 kB dist/index.es.js 22.47 kB │ gzip: 6.77 kB │ map: 67.56 kB [vite:dts] Declaration files built in 589ms. [vite-plugin-static-copy] Copied 1 items. dist/style.css 0.18 kB │ gzip: 0.15 kB dist/index.umd.js 14.88 kB │ gzip: 5.90 kB │ map: 65.89 kB ✓ built in 1.12s vite.config.ts에서 build 에 작성한 부분을 지우고 기본설정으로 하면 잘 되는데 강의처럼 build부분을 작성을 하면 jsx flag를 설정하라고 나오면서 component 폴더에 d.ts 파일들이 생성이 안됩니다.
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
tailwind css 코드 스플릿팅이 가능한가요?
tailwind를 실제로 product에 적용해본 경험이 없어서 질문드립니다. 공통된 스타일은 global.css로그인 페이지 스타일은 login.css 회원가입 페이지를 스타일을 signup.css로@layout components를 나눠서 작성했을때 코드 스플릿팅이 되나요?제대로 테스트를 못해봤지만 login.css 작성한 @layout components 클래스를 signup에서 쓰려면 써지는것 같더라구요 안썻을때 빌드시 코드 스플릿이 되는지 궁금합니다.jit 모드 라는게 있던데 프로젝트가 엄청 커졌을때 해당 기능으로 페이지 별로 어느정도 최적화가 되는지 궁금합니다.
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
StoryBook 관련 궁금 사항입니다.
Next.js를 사용하는 경우 이미지 최적화를 위해 next/image 에서 제공하는 Image 컴포넌트를 사용합니다! 이를 활용해서, 스토리북 컴포넌트를 만들 경우, React에서 이를 활용할 수 있을지 궁금합니다.현재, React-Native-Cli에서 프로젝트를 진행하고 있습니다. React-Native-Cli(View, Text, Pressable)와, React, Next에서 모두 활용 가능한, 공용 스토리북 컴포넌트를 현실적으로 만들 수 있는지, 실무에서는 각각 따로 분리해서 개발을 진행하는지 여부가 궁금합니다!타입스크립트로 만든 스토리북 패키지를, 자바스크립트를 활용한 (타입스크립트를 사용하지 않는) 프로젝트에서 활용가능한지도 궁금합니다!프로젝트를 진행하면, 스토리북과 함께 한개의 레포지토리로 관리하는 것이 좋은지, 아니면, 따로 분리해서 두개의 레포지토리로 관리하는 것이 좋은지 궁금합니다!개발 시작시, 먼저 스토리북으로 컴포넌트를 제작 후, 개발을 진행하는 것이 좋은지, 아니면, 개발을 진행해가며, 그때 그떄 공용 컴포넌트로 쓰일 만한 것들을 스토리북으로 만들어나가는 것이 좋은지 강사님의 경험상 괜찮은 방법을 알려주시면 감사하겠습니다!!
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
type-error 해결 방법 질문
import type { Meta, StoryObj } from "@storybook/react"; import { fn } from "@storybook/test"; import TagList from "../components/TagList"; // 버튼 컴포넌트의 메타 정보를 나타냄 const meta = { // 경로 title: "List/TagList", component: TagList, parameters: { layout: "centered", }, tags: ["autodocs"], argTypes: { tagList: { control: "array", description: "태그 리스트", docs: ["tag1", "tag2", "tag3"], }, onTagClick: { action: "clicked", description: "버튼 클릭 이벤트", }, }, args: { onTagClick: fn(), }, } satisfies Meta<typeof TagList>; export default meta; type Story = StoryObj<typeof meta>; export const Default: Story = { args: { tagList: ["tag1", "tag2", "tag3"], }, }; 위와 같이 코드를 작성했을 떄, tagList의 control 부분에서 타입 에러가 발생합니다. TS2322: Type "array" is not assignable to type Control | undefined어쨰서 undefined가 들어갈 수 있는지 알고 싶습니다.
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
스토리북 설치시 에러 발생 관련 질문입니다.
vite로 react + typescript 설치 후 storybook 설치시 위와 같은 에러가 발생하는데 해결방법이 있을까요?
주간 인기글
순위 정보를
불러오고 있어요