NodeJS 如何在Next.JS 14中在服务器端实现useEffect?

sycxhyv7  于 2023-11-17  发布在  Node.js
关注(0)|答案(2)|浏览(213)

在Next.JS服务器组件中实现“useEffect”前端功能的正确方法是什么?
尝试在服务器端使用useEffect,但它不起作用。在服务器端使用任何其他钩子都有效吗?如果没有,我如何实现一个函数来监视变量的变化,并在变化发生时执行操作?

bd1hkmkf

bd1hkmkf1#

EQUIPMENT Effect实际上是一个客户端钩子,你不能在服务器上使用它,你必须让那个组件成为一个客户端组件,才能使用像useEffect、useState、任何点击事件、任何表单事件等钩子。
你可以通过在代码的第一行写"use client"来创建一个组件客户端。
请注意使用use client指令将使所有子组件成为客户端组件,并将在用户端呈现,从而影响某些性能,因此建议将客户端组件保留在树的叶子上。

siotufzp

siotufzp2#

下面是我编写的一个小代码:

projectName\src\app\somepage\page.js中的page.js

import SomeComponent from "../comp/SomeComponent"

const page = () => {
    return (
        <div>
            <h1>A Page </h1>
            <SomeComponent />

            <p>Rest of the page is server-side rendered !</p>
            <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Reiciendis totam vero, laudantium nihil quae, distinctio officia quaerat neque maxime voluptatem ipsam. Quia unde quo deleniti.</p>
        </div>
    )
}

export default page

字符串
SomeComponent.js是(组件文件夹)projectName\src\app\comp\SomeComponent.js中的组件:

'use client'
import React, { useEffect, useMemo, useState } from 'react'

const SomeComponent = () => {

    const [Counter, SetCounter] = useState(0)

    const Double = useMemo(() => Counter * Counter, [Counter])
    // RETURNS DOUBLE OF COUNTER

    useEffect(() => {
        console.log("Page Rendered !!");
    }, [])
    // RUNS ONE TIME

    return (
        <div>
            Counter : {Counter}
            <div>
                Double : {Double}
            </div>
            <div>
                <button onClick={() => SetCounter(Counter + 1)}>+</button>
                <button onClick={() => SetCounter(Counter - 1)}>-</button>
            </div>
        </div>
    )
}

export default SomeComponent

请阅读:

相关问题