Hi everyone,
I have implemented a simple search functionality for users table
but for some reason Page is getting refreshed even without typing in searchbox
it gets constantly refreshed:
My Users/Index.jsx file:
import { Head } from '@inertiajs/react';
import Layout from '@/Layouts/Layout';
import Pagination from '@/Components/DataDisplay/Pagination';
import { useState, useEffect } from 'react';
import { router } from '@inertiajs/react'
export default function Index({ users }) {
const [searchTerm, setSearchTerm] = useState('');
useEffect(() => {
router.get(
'/users',
{ search: searchTerm },
{ preserveState: true, replace: true }
);
}, [searchTerm]);
const handleInputChange = (e) => {
e.preventDefault();
setSearchTerm(e.target.value);
};
const { data, links } = users;
return (
<>
<Head title="Users" />
<div>
<input
type="text"
value={searchTerm}
onChange={handleInputChange}
placeholder="Search..."
/>
</div>
<table className="min-w-full divide-y divide-gray-300">
<thead>
.... Table Markup ...
</td>
</tr>
))}
</tbody>
</table>
<Pagination links={links} />
</>
);
}
Index.layout = (page) => <Layout children={page} />;
My simple controller:
<?php
namespace App\Http\Controllers\TestingHub;
use Inertia\Inertia;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Request;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$users = User::query()
->when(Request::input('search'), function ($query, $search) {
$query->where('name', 'like', "%{$search}%");
})
->paginate(10);
return Inertia::render('Users/Index', [
'users' => $users,
]);
}
}
I'm 90% sure the problem is the way I write the useEffect and react stuff but I can't figure it out.
I really appreciate the help.
Thanks in advance.