Kết hợp ReactJS với Laravel không chỉ giúp bạn xây dựng ứng dụng web động mà còn mang đến trải nghiệm người dùng tuyệt vời. Trong bài viết này, tôi sẽ hướng dẫn các bạn từng bước từ việc thiết lập dự án đến cách triển khai React trong Laravel.
Để bắt đầu, bạn cần cài đặt Laravel. Nếu chưa có Laravel, hãy sử dụng Composer để tạo một dự án mới:
composer create-project --prefer-dist laravel/laravel laravel-react cd laravel-react
Trước khi cài đặt ReactJS, hãy chắc chắn rằng bạn đã cài đặt Node.js và npm. Kiểm tra bằng lệnh sau:
node -v npm -v
Nếu chưa có, tải Node.js từ trang web chính thức và cài đặt.
Sử dụng npm để cài đặt React và ReactDOM:
npm install react react-dom
Laravel Mix đã được cài đặt sẵn trong Laravel. Nếu bạn không thấy file webpack.mix.js
, hãy kiểm tra lại quá trình cài đặt.
Tạo một thư mục js
trong thư mục resources
và một thư mục con components
:
mkdir -p resources/js/components
Tạo file App.js
trong thư mục components
:
// resources/js/components/App.js import React from 'react'; const App = () => { return ( <div> <h1>Chào mừng đến với React trong Laravel!</h1> </div> ); }; export default App;
Mở file webpack.mix.js
và thêm cấu hình để biên dịch tài sản React:
// webpack.mix.js const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .react() .sass('resources/sass/app.scss', 'public/css');
Tạo file app.js
trong thư mục resources/js
và nhập thành phần App
:
// resources/js/app.js import React from 'react'; import ReactDOM from 'react-dom'; import App from './components/App'; if (document.getElementById('app')) { ReactDOM.render(<App />, document.getElementById('app')); }
Tạo view react.blade.php
trong thư mục resources/views
:
<!-- resources/views/react.blade.php --> <!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Laravel và React</title> <link rel="stylesheet" href="{{ mix('css/app.css') }}"> </head> <body> <div id="app"></div> <script src="{{ mix('js/app.js') }}"></script> </body> </html>
Thêm route mới trong file routes/web.php
:
// routes/web.php use Illuminate\Support\Facades\Route; Route::get('/react', function () { return view('react'); });
Chạy lệnh sau để biên dịch tài sản:
npm run dev
Khởi động server Laravel bằng lệnh:
php artisan serve
Truy cập vào trình duyệt và nhập địa chỉ http://localhost:8000/react
. Bạn sẽ thấy thông điệp “Chào mừng đến với React trong Laravel!”
Để minh họa cách quản lý state trong React, chúng ta sẽ sử dụng hook useState
:
// resources/js/components/App.js import React, { useState } from 'react'; const App = () => { const [count, setCount] = useState(0); return ( <div> <h1>Chào mừng đến với React trong Laravel!</h1> <p>Đếm: {count}</p> <button onClick={() => setCount(count + 1)}>Tăng</button> </div> ); };
Ở ví dụ trên, chúng ta đã sử dụng useState
để tạo một biến count
và hàm setCount
để cập nhật giá trị của nó. Khi người dùng nhấn nút “Tăng”, giá trị của count
sẽ tăng lên 1.
Để kết nối React với API Laravel, bạn có thể sử dụng axios
để thực hiện các yêu cầu HTTP.
Cài đặt axios:
npm install axios
Giả sử bạn có một route API trong Laravel:
// routes/api.php use App\Models\Post; use Illuminate\Support\Facades\Route; Route::get('/posts', function () { return Post::all(); });
Sửa đổi App.js
để lấy dữ liệu từ API:
import React, { useState, useEffect } from 'react'; import axios from 'axios'; const App = () => { const [posts, setPosts] = useState([]); useEffect(() => { axios.get('/api/posts') .then(response => { setPosts(response.data); }) .catch(error => { console.error("Đã xảy ra lỗi!", error); }); }, []); return ( <div> <h1>Danh sách bài viết</h1> <ul> {posts.map(post => ( <li key={post.id}>{post.title}</li> ))} </ul> </div> ); }; export default App;
Trong ví dụ này, chúng ta đã sử dụng useEffect
để gọi API và lấy danh sách bài viết từ Laravel khi component được render. Dữ liệu được lưu vào state posts
và hiển thị dưới dạng danh sách.
Việc tích hợp ReactJS vào dự án Laravel giúp bạn phát triển các ứng dụng web mạnh mẽ và tương tác hơn. Qua các bước hướng dẫn trên, tôi hy vọng bạn có thể dễ dàng áp dụng vào dự án của mình. Nếu bạn có bất kỳ câu hỏi nào hoặc muốn tìm hiểu sâu hơn, hãy để lại trong phần bình luận!