• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 선세! 뒤로가기 눌렀을때 페이지 복원 질문이요

선세! 뒤로가기 눌렀을때 페이지 복원 질문이요

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #111870

    Marina
    참가자
    app/newbody.js
    

    <div style="color: #cccccc; background-color: #1f1f1f; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">
    <div><span style="color: #ce9178;">'use client'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">generateHTML</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'@tiptap/html'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span> <span style="color: #9cdcfe;">StarterKit</span> <span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'@tiptap/starter-kit'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span> <span style="color: #9cdcfe;">Image</span> <span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'@tiptap/extension-image'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span> <span style="color: #9cdcfe;">Youtube</span> <span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'@tiptap/extension-youtube'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span> <span style="color: #9cdcfe;">Link</span> <span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'next/link'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useEffect</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">useRef</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">useState</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'react'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useSession</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'next-auth/react'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span> <span style="color: #9cdcfe;">UpDownBtn</span> <span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'./detail/[id]/UpDownBtn'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useRouter</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'next/navigation'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">export</span> <span style="color: #c586c0;">default</span> <span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">NewBody</span><span style="color: #cccccc;">() {</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">data</span><span style="color: #cccccc;">: </span><span style="color: #4fc1ff;">session</span><span style="color: #cccccc;">, </span><span style="color: #4fc1ff;">status</span><span style="color: #cccccc;"> } </span><span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">useSession</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span><span style="color: #cccccc;"> [</span><span style="color: #4fc1ff;">posts</span><span style="color: #cccccc;">, </span><span style="color: #dcdcaa;">setPosts</span><span style="color: #cccccc;">] </span><span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">useState</span><span style="color: #cccccc;">([]);</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">targetRef</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">useRef</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">null</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">router</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">useRouter</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #dcdcaa;">useEffect</span><span style="color: #cccccc;">(() </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #dcdcaa;">fetch</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'/api/post/getPost'</span><span style="color: #cccccc;">)</span></div>
    <div><span style="color: #cccccc;">            .</span><span style="color: #dcdcaa;">then</span><span style="color: #cccccc;">((</span><span style="color: #9cdcfe;">r</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span> <span style="color: #9cdcfe;">r</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">json</span><span style="color: #cccccc;">())</span></div>
    <div><span style="color: #cccccc;">            .</span><span style="color: #dcdcaa;">then</span><span style="color: #cccccc;">((</span><span style="color: #9cdcfe;">result</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #dcdcaa;">setPosts</span><span style="color: #cccccc;">(</span><span style="color: #9cdcfe;">result</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">            });</span></div>
    <div><span style="color: #cccccc;">    }, []);</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #6a9955;">// 무한스크롤</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #dcdcaa;">useEffect</span><span style="color: #cccccc;">(() </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">let</span> <span style="color: #9cdcfe;">observer</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">target</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4fc1ff;">targetRef</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">current</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #4fc1ff;">target</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">observer</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">IntersectionObserver</span><span style="color: #cccccc;">(</span></div>
    <div><span style="color: #cccccc;">                (</span><span style="color: #9cdcfe;">entries</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #9cdcfe;">entries</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">forEach</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">async</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">entry</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">entry</span><span style="color: #cccccc;">.</span><span style="color: #4fc1ff;">isIntersecting</span> <span style="color: #d4d4d4;">&&</span> <span style="color: #4fc1ff;">posts</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">length</span> <span style="color: #d4d4d4;">></span> <span style="color: #b5cea8;">0</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">                            </span><span style="color: #6a9955;">// 마지막 게시물의 ID를 얻기</span></div>
    <div><span style="color: #cccccc;">                            </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">lastId</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4fc1ff;">posts</span><span style="color: #cccccc;">[</span><span style="color: #4fc1ff;">posts</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">length</span> <span style="color: #d4d4d4;">-</span> <span style="color: #b5cea8;">1</span><span style="color: #cccccc;">].</span><span style="color: #9cdcfe;">_id</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">                            </span><span style="color: #c586c0;">try</span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                                </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">response</span> <span style="color: #d4d4d4;">=</span> <span style="color: #c586c0;">await</span> <span style="color: #dcdcaa;">fetch</span><span style="color: #cccccc;">(</span></div>
    <div><span style="color: #cccccc;">                                    </span><span style="color: #ce9178;">'/api/post/getPost'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                                    {</span></div>
    <div><span style="color: #cccccc;">                                        </span><span style="color: #9cdcfe;">method</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'POST'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                                        </span><span style="color: #9cdcfe;">headers</span><span style="color: #9cdcfe;">:</span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                                            </span><span style="color: #ce9178;">'Content-Type'</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'application/json'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                                        },</span></div>
    <div><span style="color: #cccccc;">                                        </span><span style="color: #9cdcfe;">body</span><span style="color: #9cdcfe;">:</span> <span style="color: #9cdcfe;">JSON</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">stringify</span><span style="color: #cccccc;">({ </span><span style="color: #9cdcfe;">lastId</span><span style="color: #cccccc;"> }),</span></div>
    <div><span style="color: #cccccc;">                                    }</span></div>
    <div><span style="color: #cccccc;">                                );</span></div>
    <div><span style="color: #cccccc;">                                </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">newPosts</span> <span style="color: #d4d4d4;">=</span> <span style="color: #c586c0;">await</span> <span style="color: #4fc1ff;">response</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">json</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">                                </span><span style="color: #dcdcaa;">setPosts</span><span style="color: #cccccc;">((</span><span style="color: #9cdcfe;">prevPosts</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> [</span></div>
    <div><span style="color: #cccccc;">                                    </span><span style="color: #d4d4d4;">...</span><span style="color: #9cdcfe;">prevPosts</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                                    </span><span style="color: #d4d4d4;">...</span><span style="color: #4fc1ff;">newPosts</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                                ]);</span></div>
    <div><span style="color: #cccccc;">                            } </span><span style="color: #c586c0;">catch</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">error</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">                                </span><span style="color: #9cdcfe;">console</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">error</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'Error fetching posts:'</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">error</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">                            }</span></div>
    <div><span style="color: #cccccc;">                        }</span></div>
    <div><span style="color: #cccccc;">                    });</span></div>
    <div><span style="color: #cccccc;">                },</span></div>
    <div><span style="color: #cccccc;">                { </span><span style="color: #9cdcfe;">threshold</span><span style="color: #9cdcfe;">:</span> <span style="color: #b5cea8;">0.5</span><span style="color: #cccccc;"> }</span></div>
    <div><span style="color: #cccccc;">            );</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">observer</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">observe</span><span style="color: #cccccc;">(</span><span style="color: #4fc1ff;">target</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> () </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">observer</span> <span style="color: #d4d4d4;">&&</span> <span style="color: #4fc1ff;">target</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #9cdcfe;">observer</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">unobserve</span><span style="color: #cccccc;">(</span><span style="color: #4fc1ff;">target</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">                }</span></div>
    <div><span style="color: #cccccc;">            };</span></div>
    <div><span style="color: #cccccc;">        }</span></div>
    <div><span style="color: #cccccc;">    }, [</span><span style="color: #4fc1ff;">targetRef</span><span style="color: #cccccc;">, </span><span style="color: #4fc1ff;">posts</span><span style="color: #cccccc;">]); </span><span style="color: #6a9955;">// targetRef와 posts에 의존성 추가</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #6a9955;">// 게시물 클릭 핸들러</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">handlePostClick</span> <span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">postId</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #9cdcfe;">localStorage</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">setItem</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'scrollY'</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">window</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">scrollY</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">toString</span><span style="color: #cccccc;">());</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #4fc1ff;">router</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">push</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">`/detail/</span><span style="color: #569cd6;">${</span><span style="color: #9cdcfe;">postId</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">`</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">    };</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">refreshPosts</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">async</span><span style="color: #cccccc;"> () </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">try</span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">response</span> <span style="color: #d4d4d4;">=</span> <span style="color: #c586c0;">await</span> <span style="color: #dcdcaa;">fetch</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'/api/post/getPost'</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">newPosts</span> <span style="color: #d4d4d4;">=</span> <span style="color: #c586c0;">await</span> <span style="color: #4fc1ff;">response</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">json</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #dcdcaa;">setPosts</span><span style="color: #cccccc;">(</span><span style="color: #4fc1ff;">newPosts</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        } </span><span style="color: #c586c0;">catch</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">error</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">console</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">error</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'Error fetching posts:'</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">error</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        }</span></div>
    <div><span style="color: #cccccc;">    };</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">formatReativeDate</span> <span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">dateString</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">date</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">Date</span><span style="color: #cccccc;">(</span><span style="color: #9cdcfe;">dateString</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">now</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">Date</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">diffInSeconds</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">Math</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">floor</span><span style="color: #cccccc;">((</span><span style="color: #4fc1ff;">now</span> <span style="color: #d4d4d4;">-</span> <span style="color: #4fc1ff;">date</span><span style="color: #cccccc;">) </span><span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">1000</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #4fc1ff;">diffInSeconds</span> <span style="color: #d4d4d4;"><</span> <span style="color: #b5cea8;">60</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">return</span> <span style="color: #ce9178;">`</span><span style="color: #569cd6;">${</span><span style="color: #4fc1ff;">diffInSeconds</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">sec ago`</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        } </span><span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #4fc1ff;">diffInSeconds</span> <span style="color: #d4d4d4;"><</span> <span style="color: #b5cea8;">3600</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">return</span> <span style="color: #ce9178;">`</span><span style="color: #569cd6;">${</span><span style="color: #9cdcfe;">Math</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">floor</span><span style="color: #d4d4d4;">(</span><span style="color: #4fc1ff;">diffInSeconds</span><span style="color: #d4d4d4;"> / </span><span style="color: #b5cea8;">60</span><span style="color: #d4d4d4;">)</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">min ago`</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        } </span><span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #4fc1ff;">diffInSeconds</span> <span style="color: #d4d4d4;"><</span> <span style="color: #b5cea8;">86400</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">return</span> <span style="color: #ce9178;">`</span><span style="color: #569cd6;">${</span><span style="color: #9cdcfe;">Math</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">floor</span><span style="color: #d4d4d4;">(</span><span style="color: #4fc1ff;">diffInSeconds</span><span style="color: #d4d4d4;"> / </span><span style="color: #b5cea8;">3600</span><span style="color: #d4d4d4;">)</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">hours ago`</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        } </span><span style="color: #c586c0;">else</span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">return</span> <span style="color: #4fc1ff;">date</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">toLocaleDateString</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'ko-KR'</span><span style="color: #cccccc;">, {</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #9cdcfe;">year</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'numeric'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #9cdcfe;">month</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'2-digit'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #9cdcfe;">day</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'2-digit'</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">            });</span></div>
    <div><span style="color: #cccccc;">        }</span></div>
    <div><span style="color: #cccccc;">    };</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">convertYoutubeLink</span> <span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">url</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">regExp</span> <span style="color: #d4d4d4;">=</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #d16969;">/</span><span style="color: #dcdcaa;">^</span><span style="color: #d16969;">.</span><span style="color: #d7ba7d;">*</span><span style="color: #ce9178;">(</span><span style="color: #d16969;">youtu</span><span style="color: #d7ba7d;">\.</span><span style="color: #d16969;">be</span><span style="color: #d7ba7d;">\/</span><span style="color: #dcdcaa;">|</span><span style="color: #d16969;">v</span><span style="color: #d7ba7d;">\/</span><span style="color: #dcdcaa;">|</span><span style="color: #d16969;">u</span><span style="color: #d7ba7d;">\/</span><span style="color: #d16969;">\w</span><span style="color: #d7ba7d;">\/</span><span style="color: #dcdcaa;">|</span><span style="color: #d16969;">embed</span><span style="color: #d7ba7d;">\/</span><span style="color: #dcdcaa;">|</span><span style="color: #d16969;">watch</span><span style="color: #d7ba7d;">\?</span><span style="color: #d16969;">v=</span><span style="color: #dcdcaa;">|</span><span style="color: #d7ba7d;">\&</span><span style="color: #d16969;">v=</span><span style="color: #ce9178;">)([^</span><span style="color: #d16969;">#</span><span style="color: #d7ba7d;">\&\?</span><span style="color: #ce9178;">]</span><span style="color: #d7ba7d;">*</span><span style="color: #ce9178;">)</span><span style="color: #d16969;">.</span><span style="color: #d7ba7d;">*</span><span style="color: #d16969;">/</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">match</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">url</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">match</span><span style="color: #cccccc;">(</span><span style="color: #4fc1ff;">regExp</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">return</span> <span style="color: #4fc1ff;">match</span> <span style="color: #d4d4d4;">&&</span> <span style="color: #4fc1ff;">match</span><span style="color: #cccccc;">[</span><span style="color: #b5cea8;">2</span><span style="color: #cccccc;">].</span><span style="color: #9cdcfe;">length</span> <span style="color: #d4d4d4;">===</span> <span style="color: #b5cea8;">11</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #d4d4d4;">?</span> <span style="color: #ce9178;">`https://www.youtube.com/embed/</span><span style="color: #569cd6;">${</span><span style="color: #4fc1ff;">match</span><span style="color: #d4d4d4;">[</span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">]</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">`</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #d4d4d4;">:</span> <span style="color: #9cdcfe;">url</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">    };</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">renderContent</span> <span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">item</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">subIndex</span><span style="color: #cccccc;">) </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">switch</span><span style="color: #cccccc;"> (</span><span style="color: #9cdcfe;">item</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">type</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">case</span> <span style="color: #ce9178;">'youtube'</span><span style="color: #cccccc;">:</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">youtubeUrl</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">convertYoutubeLink</span><span style="color: #cccccc;">(</span><span style="color: #9cdcfe;">item</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">attrs</span><span style="color: #cccccc;">.</span><span style="color: #9cdcfe;">src</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> (</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #808080;"><</span><span style="color: #569cd6;">iframe</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">key</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">subIndex</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">src</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">youtubeUrl</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"w-full h-96"</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #808080;">/></span></div>
    <div><span style="color: #cccccc;">                );</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #c586c0;">default</span><span style="color: #cccccc;">:</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">htmlStr</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">generateHTML</span><span style="color: #cccccc;">(</span><span style="color: #9cdcfe;">item</span><span style="color: #cccccc;">, [</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #4fc1ff;">StarterKit</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #4fc1ff;">Image</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #4fc1ff;">Youtube</span><span style="color: #cccccc;">,</span></div>
    <div><span style="color: #cccccc;">                ]);</span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> (</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #808080;"><</span><span style="color: #569cd6;">code</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">key</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">subIndex</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"font-normal break-all line-clamp-1"</span></div>
    <div><span style="color: #cccccc;">                        </span><span style="color: #9cdcfe;">dangerouslySetInnerHTML</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">{ </span><span style="color: #9cdcfe;">__html</span><span style="color: #9cdcfe;">:</span> <span style="color: #4fc1ff;">htmlStr</span><span style="color: #d4d4d4;"> }</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">                    </span><span style="color: #808080;">></</span><span style="color: #569cd6;">code</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">                );</span></div>
    <div><span style="color: #cccccc;">        }</span></div>
    <div><span style="color: #cccccc;">    };</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> (</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"><></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">posts</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">map</span><span style="color: #d4d4d4;">((</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">index</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> (</span></div>
    <div><span style="color: #d4d4d4;">                </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"border rounded-lg shadow-lg p-4 w-full max-w-xl mx-auto my-1 hover:bg-slate-100"</span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #9cdcfe;">key</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">index</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                </span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #9cdcfe;">onClick</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">e</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #dcdcaa;">handlePostClick</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">_id</span><span style="color: #d4d4d4;">);</span></div>
    <div><span style="color: #d4d4d4;">                        }</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"col-span-2"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">span</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"text-slate-700"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                @</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">authorname</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #569cd6;">span</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">span</span><span style="color: #808080;">></span><span style="color: #d4d4d4;"> | </span><span style="color: #808080;"></</span><span style="color: #569cd6;">span</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">span</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"text-slate-700"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">{</span><span style="color: #dcdcaa;">formatReativeDate</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">date</span><span style="color: #d4d4d4;">)</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #569cd6;">span</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"col-span-1"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">h2</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"text-2xl font-semibold mb-2 hover:bg-slate-300 ellipsis"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">title</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #569cd6;">h2</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #569cd6;">{</span><span style="color: #6a9955;">/* content body */</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"col-span-1 mt-3"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">p</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"font-normal text-gray-600 break-all line-clamp-3 multi-line-ellipsis imageSizes"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">content</span></div>
    <div><span style="color: #d4d4d4;">                                    .</span><span style="color: #dcdcaa;">slice</span><span style="color: #d4d4d4;">(</span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">5</span><span style="color: #d4d4d4;">)</span></div>
    <div><span style="color: #d4d4d4;">                                    .</span><span style="color: #dcdcaa;">map</span><span style="color: #d4d4d4;">(</span><span style="color: #dcdcaa;">renderContent</span><span style="color: #d4d4d4;">)</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #569cd6;">p</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">session</span><span style="color: #d4d4d4;">?.</span><span style="color: #9cdcfe;">user</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">_id</span><span style="color: #d4d4d4;"> == </span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">author</span><span style="color: #d4d4d4;"> ||</span></div>
    <div><span style="color: #d4d4d4;">                    </span><span style="color: #4fc1ff;">session</span><span style="color: #d4d4d4;">?.</span><span style="color: #9cdcfe;">user</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">role</span><span style="color: #d4d4d4;"> == </span><span style="color: #ce9178;">'admin'</span><span style="color: #d4d4d4;"> ? (</span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"col-span-2 pt-3 pb-3"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">UpDownBtn</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">content</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">session</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">session</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">refreshPosts</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #dcdcaa;">refreshPosts</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;">/></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">Link</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">href</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #ce9178;">`/edit/</span><span style="color: #569cd6;">${</span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">_id</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">`</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"mr-3 hover:text-red-600"</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                Edit</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #4ec9b0;">Link</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">span</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"hover:text-red-600"</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">onClick</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{async</span><span style="color: #d4d4d4;"> () </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                                    </span><span style="color: #c586c0;">await</span> <span style="color: #dcdcaa;">fetch</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'/api/post/delete'</span><span style="color: #d4d4d4;">, {</span></div>
    <div><span style="color: #d4d4d4;">                                        </span><span style="color: #9cdcfe;">method</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'POST'</span><span style="color: #d4d4d4;">,</span></div>
    <div><span style="color: #d4d4d4;">                                        </span><span style="color: #9cdcfe;">body</span><span style="color: #9cdcfe;">:</span> <span style="color: #9cdcfe;">JSON</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">stringify</span><span style="color: #d4d4d4;">({</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #9cdcfe;">contentId</span><span style="color: #9cdcfe;">:</span> <span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">_id</span><span style="color: #d4d4d4;">,</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #9cdcfe;">authorId</span><span style="color: #9cdcfe;">:</span> <span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">author</span><span style="color: #d4d4d4;">,</span></div>
    <div><span style="color: #d4d4d4;">                                        }),</span></div>
    <div><span style="color: #d4d4d4;">                                    })</span></div>
    <div><span style="color: #d4d4d4;">                                        .</span><span style="color: #dcdcaa;">then</span><span style="color: #d4d4d4;">((</span><span style="color: #9cdcfe;">response</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (!</span><span style="color: #9cdcfe;">response</span><span style="color: #d4d4d4;">.</span><span style="color: #4fc1ff;">ok</span><span style="color: #d4d4d4;">) {</span></div>
    <div><span style="color: #d4d4d4;">                                                </span><span style="color: #c586c0;">throw</span> <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">Error</span><span style="color: #d4d4d4;">(</span></div>
    <div><span style="color: #d4d4d4;">                                                    </span><span style="color: #ce9178;">'Failed to delete the post'</span></div>
    <div><span style="color: #d4d4d4;">                                                );</span></div>
    <div><span style="color: #d4d4d4;">                                            }</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #6a9955;">// 게시물 삭제 후 목록을 다시 가져오는 API 호출</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #c586c0;">return</span> <span style="color: #dcdcaa;">fetch</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'/api/post/getPost'</span><span style="color: #d4d4d4;">)</span></div>
    <div><span style="color: #d4d4d4;">                                                .</span><span style="color: #dcdcaa;">then</span><span style="color: #d4d4d4;">((</span><span style="color: #9cdcfe;">r</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span> <span style="color: #9cdcfe;">r</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">json</span><span style="color: #d4d4d4;">())</span></div>
    <div><span style="color: #d4d4d4;">                                                .</span><span style="color: #dcdcaa;">then</span><span style="color: #d4d4d4;">((</span><span style="color: #9cdcfe;">result</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                                                    </span><span style="color: #dcdcaa;">setPosts</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">result</span><span style="color: #d4d4d4;">);</span></div>
    <div><span style="color: #d4d4d4;">                                                });</span></div>
    <div><span style="color: #d4d4d4;">                                        })</span></div>
    <div><span style="color: #d4d4d4;">                                        .</span><span style="color: #dcdcaa;">catch</span><span style="color: #d4d4d4;">((</span><span style="color: #9cdcfe;">error</span><span style="color: #d4d4d4;">) </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #6a9955;">// 에러 핸들링</span></div>
    <div><span style="color: #d4d4d4;">                                            </span><span style="color: #9cdcfe;">console</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">error</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">'Error:'</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">error</span><span style="color: #d4d4d4;">);</span></div>
    <div><span style="color: #d4d4d4;">                                        });</span></div>
    <div><span style="color: #d4d4d4;">                                }</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                                delete</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"></</span><span style="color: #569cd6;">span</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                    ) : (</span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"col-span-2 pt-3 pb-3"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">UpDownBtn</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">content</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">content</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">session</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">session</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                                </span><span style="color: #9cdcfe;">refreshPosts</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #dcdcaa;">refreshPosts</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                            </span><span style="color: #808080;">/></span></div>
    <div><span style="color: #d4d4d4;">                        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">                    )</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #d4d4d4;">                </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #d4d4d4;">            ))</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">ref</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">targetRef</span><span style="color: #569cd6;">}</span> <span style="color: #9cdcfe;">style</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">{ </span><span style="color: #9cdcfe;">height</span><span style="color: #9cdcfe;">:</span> <span style="color: #ce9178;">'50px'</span><span style="color: #d4d4d4;"> }</span><span style="color: #569cd6;">}</span><span style="color: #808080;">></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"></></span></div>
    <div><span style="color: #cccccc;">    );</span></div>
    <div><span style="color: #cccccc;">}</span></div>
    </div>

    
    components/RollBack.js
    

    <div style="color: #cccccc; background-color: #1f1f1f; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">
    <div><span style="color: #ce9178;">'use client'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useRouter</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'next/navigation'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useEffect</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'react'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">FaArrowLeftLong</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'react-icons/fa6'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">usePathname</span><span style="color: #cccccc;">, </span><span style="color: #9cdcfe;">useSearchParams</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'next/navigation'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">export</span> <span style="color: #c586c0;">default</span> <span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">RollBack</span><span style="color: #cccccc;">() {</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">router</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">useRouter</span><span style="color: #cccccc;">();</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> (</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">a</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"px-8 pb-4 flex items-center justify-start"</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">onClick</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">() </span><span style="color: #569cd6;">=></span><span style="color: #d4d4d4;"> {</span></div>
    <div><span style="color: #d4d4d4;">                </span><span style="color: #4fc1ff;">router</span><span style="color: #d4d4d4;">.</span><span style="color: #dcdcaa;">back</span><span style="color: #d4d4d4;">();</span></div>
    <div><span style="color: #d4d4d4;">            }</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">FaArrowLeftLong</span> <span style="color: #9cdcfe;">size</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #b5cea8;">20</span><span style="color: #569cd6;">}</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"mr-3"</span> <span style="color: #808080;">/></span></div>
    <div><span style="color: #cccccc;">            back</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">a</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">    );</span></div>
    <div><span style="color: #cccccc;">}</span></div>
    </div>

    components/ScrollRestoration.js
    

    <div style="color: #cccccc; background-color: #1f1f1f; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">
    <div><span style="color: #ce9178;">'use client'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> { </span><span style="color: #9cdcfe;">useEffect</span><span style="color: #cccccc;"> } </span><span style="color: #c586c0;">from</span> <span style="color: #ce9178;">'react'</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #569cd6;">const</span> <span style="color: #dcdcaa;">ScrollRestoration</span> <span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> () </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #dcdcaa;">useEffect</span><span style="color: #cccccc;">(() </span><span style="color: #569cd6;">=></span><span style="color: #cccccc;"> {</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #6a9955;">// 스크롤 위치 복원</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">savedScrollY</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">localStorage</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">getItem</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">'scrollY'</span><span style="color: #cccccc;">);</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> (</span><span style="color: #4fc1ff;">savedScrollY</span><span style="color: #cccccc;">) {</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #9cdcfe;">window</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">scrollTo</span><span style="color: #cccccc;">(</span><span style="color: #b5cea8;">0</span><span style="color: #cccccc;">, </span><span style="color: #dcdcaa;">parseInt</span><span style="color: #cccccc;">(</span><span style="color: #4fc1ff;">savedScrollY</span><span style="color: #cccccc;">, </span><span style="color: #b5cea8;">10</span><span style="color: #cccccc;">));</span></div>
    <div><span style="color: #cccccc;">        }</span></div>
    <div><span style="color: #cccccc;">    }, []);</span></div>
    <div><span style="color: #cccccc;">    </span><span style="color: #c586c0;">return</span> <span style="color: #569cd6;">null</span><span style="color: #cccccc;">;</span></div>
    <div><span style="color: #cccccc;">};</span></div>
    <div><span style="color: #c586c0;">export</span> <span style="color: #c586c0;">default</span> <span style="color: #dcdcaa;">ScrollRestoration</span><span style="color: #cccccc;">;</span></div>
    </div>

    
    detail/page.js
    

    <div style="color: #cccccc; background-color: #1f1f1f; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">
    <div><span style="color: #cccccc;">   </span><span style="color: #c586c0;">return</span><span style="color: #cccccc;"> (</span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">section</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"bg-white"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">RollBack</span> <span style="color: #808080;">/></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"px-4 w-full"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">                </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"grid gap-8"</span><span style="color: #808080;">></span></div>
    </div>

    app/page.js
    

    <div style="color: #cccccc; background-color: #1f1f1f; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"><</span><span style="color: #569cd6;">div</span> <span style="color: #9cdcfe;">className</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"container grid grid-cols-1"</span><span style="color: #808080;">></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #569cd6;">{</span><span style="color: #6a9955;">/* <BodyContent result={transformedResult} /> */</span><span style="color: #569cd6;">}</span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">ScrollRestoration</span> <span style="color: #808080;">/></span></div>
    <div><span style="color: #cccccc;">            </span><span style="color: #808080;"><</span><span style="color: #4ec9b0;">NewBody</span> <span style="color: #9cdcfe;">result</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">{</span><span style="color: #4fc1ff;">transformedResult</span><span style="color: #569cd6;">}</span> <span style="color: #808080;">/></span></div>
    <div><span style="color: #cccccc;">        </span><span style="color: #808080;"></</span><span style="color: #569cd6;">div</span><span style="color: #808080;">>

    </span></div>
    </div>

    무한 스크롤을 만들어서 데이터를 5개씩 마우스 내릴때마다 실행하고 있어요 
    
    디테일 페이지를 들어갔다가 뒤로가기를 눌러서 나오면 항상 맨처음 데이터로 되돌아가서 
    스크롤 y 값을localStroage에 저장을 하고 그 값을 불러오려고 하는데 이게 잘 안되요 
    
    지금 상황은 localStorage에는 잘 저장이 되고 있는데 scrollTo로 해서 불러 오면 
    저장된 y값으로 이동을 안해요 
    
     
    
    
    #111872

    Marina
    참가자
    수정해도 html로 나오네요 
    
    
    
    		
    	
    #111887

    codingapple
    키 마스터
    뒤로가기 누르면 state가 리셋되어서 그만큼의 스크롤할 높이도 없어지는게 아닐까요
    #111900

    Marina
    참가자

    <div>settimeout을 써서 조금 뒤에 출력하도록 했는데도 페이지 변동이 안생겨요 ,</div>
    <div>
    </div>

    
    
    		
    	
    #111925

    codingapple
    키 마스터
    리액트 라우터 라이브러리 안에있는 ScrollRestoration 컴포넌트같은거 써봅시다
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠