Next.js(フロントエンド)と PHP(バックエンド)を連携させて、ボタンクリックでデータを取得するSPA的な通信処理を構築します。
http://localhost:3000
http://localhost/next_demo2/backend/backend1.php
'use client';
import { useState } from 'react';
export default function DogPage() {
const [response, setResponse] = useState('');
const [loading, setLoading] = useState(false);
const fetchData = async () => {
setLoading(true);
try {
const res = await fetch('http://localhost/next_demo2/backend/backend1.php');
if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
const data = await res.json();
setResponse(JSON.stringify(data, null, 2));
} catch (error) {
setResponse('エラーが発生しました: ' + error);
} finally {
setLoading(false);
}
};
return (
<main className="p-6">
<h1 className="text-2xl font-bold mb-4">PHPと通信するNext.jsデモ</h1>
<button
className="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700"
onClick={fetchData}
disabled={loading}
>
{loading ? '通信中...' : 'PHPからデータ取得'}
</button>
<pre className="mt-4 bg-gray-100 p-4 rounded text-sm">{response}</pre>
</main>
);
}
<?php
// CORS(クロスオリジン)対応
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
// ダミーデータを返す
$response = [
'message' => 'こんにちは、Next.jsからのアクセスです!',
'time' => date('Y-m-d H:i:s')
];
echo json_encode($response);
Next.jsとPHPは別ポートで動いているため、fetch()
で通信するにはPHP側で CORS を許可する必要があります。
開発中は Access-Control-Allow-Origin: *
でOKですが、本番環境では許可するドメインを限定しましょう。
yarn dev
を実行し、http://localhost:3000/dog
にアクセス