Lau*_*ass 8 reactjs server react-server-components
我试图了解 React 服务器组件以及如何在不使用 useState 和 useEffect 的情况下渲染组件状态。我创建了一个带有嵌入式客户端组件的服务器组件,两者都获取少量数据并显示为 JSON。
客户端组件按预期工作并呈现从 API 获取的 json 数据。
主客户端.tsx
import { useEffect, useState } from "react"
export default function Main() {
let [data, setData] = useState(undefined);
async function fetchData() {
let value = await fetch("https://jsonplaceholder.typicode.com/posts");
let result = await value.json();
let slice = result.slice(0,2);
return slice;
}
useEffect(()=>{
fetchData().then(value => {
setData(value);
console.log("data", data)
});
}, [])
return (<div className="component">
<h1>Client Main</h1>
{data &&
<div>
<pre>
{JSON.stringify(data, null, 2)}
</pre>
</div>
}
</div>)
}
Run Code Online (Sandbox Code Playgroud)
服务器组件不会重新渲染 json 数据。它基本上是客户端代码的副本,没有 useEffect、useRef 和 useState,因为它们在服务器上不可用。
它呈现初始化的数据,但不呈现获取的数据。
主服务器.tsx
import Client from "../components/main.client"
export default function Main() {
let data = {key: "initial value"};
let hello = "hello world";
async function fetchData() {
let value = await fetch("https://jsonplaceholder.typicode.com/posts");
let result = await value.json();
let slice = result.slice(0,2);
return slice;
}
fetchData().then(value => {
data = [...value];
console.log("data", data)
});
return (<div className="component">
<h1>Server Main</h1>
{hello}
{data &&
<div>
<pre>
{JSON.stringify(data, null, 2)}
</pre>
</div>
}
<Client/>
</div>)
}
Run Code Online (Sandbox Code Playgroud)
我如何正确分配数据数组(从获取返回)以便它在服务器上呈现?
小智 2
如果您使用 Next.JS,则可能需要使用“'use client';” 在任何导入之前解决此问题。看这个例子:
"use client";
import { useState } from "react";
import Image from "next/image";
import { Inter } from "@next/font/google";
Run Code Online (Sandbox Code Playgroud)
希望对您有帮助。
| 归档时间: |
|
| 查看次数: |
6715 次 |
| 最近记录: |