그냥 alert를 디버깅이나 프로토타입이 아닌 만약 Production 모드, 곧
실제 서비스에 사용한다면 그건 거의 예의가 바닥과 키스하는 수준일거시다.
많이 사용되는 sweetalert는 react에도 역시 편하게 사용된다. 그냥 한번만 보장
설치
npm i sweetalert2 sweetalert2-react-content
그냥 보기만 하면 알게 되는 억지스러운 억지 예제 중에서 억지스러울만큼
억지스럽기가 억지스러운 억지스럽기 그지없는 억지 예제
App.jsx
import { useState } from "react"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; function App() { const [userInput, setUserInput] = useState(""); // https://sweetalert2.github.io/#usage를 참고해서 쓰면 거저 쓰게 됨! const getUserInput = () => { withReactContent(Swal).fire({ title: <i>머라 쓸거얌</i>, input: "text", userInput, preConfirm: () => { setUserInput(Swal.getInput()?.value || ""); }, }); }; const justMsg = () => { withReactContent(Swal).fire("안농 카리낭 반가벙"); }; const successMsg = () => { withReactContent(Swal).fire({ title: "카리낭", icon: "success" /* error, info, warning, question */, draggable: true, }); }; const customMsg = () => { withReactContent(Swal).fire({ title: "오 세이니", text: "파란 망토와 함께 펄펄", imageUrl: "https://gdimg.gmarket.co.kr/2283523733/still/280?ver=1637125938", imageWidth: 400, imageHeight: 200, imageAlt: "그저 복사붙여넣기", // 아래 preConfirm을 잘 쓰겠네용 preConfirm: () => { setUserInput("세이니닝?"); }, }); }; const customMsg2 = () => { withReactContent(Swal) .fire({ title: "정말이닝?", text: "되돌릴수 없다니깡!", icon: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: "좋아 지워주겠엉", cancelButtonText: "암것도 안할꺼얌", }) .then((result) => { if (result.isConfirmed) { setUserInput("지웠겠징!"); Swal.fire({ title: "지웠지롱", text: "지웠다냥? 그렇게 쉽겡", icon: "success", }); } else { setUserInput(""); } }); }; return ( <> <h1>띠이작</h1> <button onClick={getUserInput}>입력받기</button> <button onClick={justMsg}>단순 메세지</button> <button onClick={successMsg}>썽꽁 메세지</button> <button onClick={customMsg}>커스텀 메세지</button> <button onClick={customMsg2}>커스텀 메세지</button> <div>입력: {userInput}</div> </> ); } export default App;
결과는 아래 비스무리
소스를 누네 힘주고 보았다면, withReactContent(Swal).fire 만 받아들인다면
기존 sweetalert2 사용방식과 거의 완벽하게 똑같다.
https://www.youtube.com/watch?v=fSuvy8ALqm0
React(리액트) 티키타카 32 (motion) 애니메이션 (0) | 2025.03.26 |
---|---|
React(리액트) 티키타카 31 (Recharts) (0) | 2025.03.25 |
React(리액트) 티키타카 29 (CkEditor) (0) | 2025.03.22 |
React(리액트) 티키타카 28 (tanstack useInfiniteQuery) (0) | 2025.03.19 |
React(리액트) 티키타카 27 (AG-Grid 활용 2) (0) | 2025.03.17 |