使用React + React Hooks
使用fetch请求获取数据并创建排名。
假设
我们将从以下之前创建的环境开始。
親 需要中文精通的中文為母語者來改寫此句子。
app.tsx文件的内容需要用中文进行本地化
import React, { FC } from "react";
const App: FC = () => {
return <h1>Hello World</h1>;
};
export default App;
孩子
component文件夹 > content.tsx
※将数据传递到此组件,稍后使用
import React, { FC } from "react";
export const Content: FC = () => {
return <h1>Hello Hello</h1>;
};
到目前为止确认一.
如果在浏览器中访问执行 yarn start 后显示了 Hello World,则表示一切正常!
创建dummyData
使用API并通过json-server假设数据流动,创建虚拟数据。
执行yarn add -D json-server命令。
模拟文件夹 > 虚拟数据.json
虚拟数据.json
{
"ranking": [
{ "word": "テスト", "count": 10 },
{ "word": "テスト1", "count": 5 },
{ "word": "テスト2", "count": 1 }
]
}
创建模型
源文件位于 types 文件夹下的 type.d.ts 文件中。
export interface Ranking {
word: string;
count: number;
}
在顶级的app.tsx文件中进行数据管理。
app.tsx: 应用.tsx
import React, { FC, useEffect, useState } from "react";
import { Content } from "./component/content";
import { Ranking } from "./types/type";
const App: FC = () => {
const [ranking, setRanking] = useState<Ranking[]>([]);
useEffect(() => {
const fetchData = async () => {
const response = await fetch("http://localhost:3000/ranking");
const rankingData = await response.json();
setRanking(rankingData);
//今回はブラウザ上でデータが入ってきているか確認するためconsoleを記載
console.log(rankingData);
};
fetchData();
}, []);
return (
<>
<Content />
</>
);
};
export default App;
-
- Appコンポーネント内でuseStateを使う
rankingは初期値(今回はuseState<RankingData[]>([])となっているので空配列が初期値)
setRankingはデータが更新した値(今回はfetchして取得したデータを入れる)
useEffect(副作用):関数コンポーネントのレンダリングに関係ない処理
useEffectの第二引数である[]に値を入れることで依存関係が作れる
在此我們確認至目前為止(確認二)。
-
- 在终端上执行命令npx json-server –watch ./mock/dummyData.json({^_^}/ hi!如果看到这个标记就好了!)
-
- 在另一个终端上执行yarn start命令
-
- 在浏览器中访问localhost:8111
- 在验证控制台上确认存在相同值的虚拟数据。
现在数据传输的准备工作已经完成了!
将数据传送到组件中
app.tsx 的中文翻译:
app.tsx
<Content ranking={ranking}/>
useStateのrankingを子に流す
由于内容.tsx没有进行任何更改,所以在ranking中出现了错误。
内容.tsx
import React, { FC } from "react";
import { RankingData } from "../types/type";
export const Content: FC<RankingData> = (props) => {
const { ranking } = props;
return (
<>
<h1>Hello Hello</h1>
<table>
<tr>
{ranking.map(({ word }) => {
return (
<tr>
<td key={word}>{word}</td>
</tr>
);
})}
</tr>
</table>
</>
);
};
-
- 親から流れてきたranking= props
rankingを分割代入で展開する
rankingのデータを全てテーブルに入れるためmapを使う
ダミーデータのcountは使わないのでwordだけ
新しい型RankingDataを作成(下記)
tyoes > type.d.ts
tyoes > tyoes.d.ts
export interface RankingData {
ranking: Ranking[];
}
最终
-
- 在终端上执行命令npx json-server –watch ./mock/dummyData.json(已将其作为mock命令整合到scripts中,使用yarn mock)
-
- 在另一个终端中执行yarn start命令
- 在浏览器中访问localhost:8111
如果在“你好你好”之后出现了“测试”,“测试1”,“测试2”的显示,那就没问题!
只需要增加组件并进行横向展开即可。