Поиск данных с помощью axios в React с использованием API Laravel

#reactjs #laravel #axios

Вопрос:

Я использую React и Laravel для создания приложения. Мне удалось отобразить данные с помощью Axios в компоненте и выполнить отдельный поиск данных в другом компоненте с помощью этого кода :

 const [data,setData]=useState([]);
    
async function search(key)
    {
        console.warn(key)
        let result = await fetch("http://localhost:8000/api/search/" key);
        result = await result.json();
        console.warn(result)
        setData(result)
    }
 

Проблема в том, что мне не удается совместить поиск и отображение данных в одном компоненте. Как это сделать ? Я использую личный API Laravel.

JS Компонент отображения данных ( без поиска ):

 import React, { Component } from "react";
import axios from "axios";
import { Container, Dropdown, ListGroup, Button } from "react-bootstrap";
import { Table, Thead, Tbody, Tr, Th, Td } from "react-super-responsive-table";

class Patient extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      patients: [],
    };
  }

  componentDidMount() {
    axios
      .get("api/patients")
      .then((response) => {
        this.setState({ patients: response.data });
      })
      .catch((err) => console.log(err));
  }

  render() {
    return (
      <div>
        <Container>
         
          <div className="form-group">
            <label htmlFor="exampleInputEmail1">Search</label>
            <input
              type="text"
              className="form-control"
              id=" "
              placeholder="Search"
              id="name"
            />
          </div>

          <Table className="table table-hover">
            <Thead className="thead-light text-center">
              <Tr>
                <Th>ID</Th>
                <Th>NAME</Th>
                <Th>FIRST NAME</Th>
              </Tr>
            </Thead>
            <Tbody className="text-center">
              {this.state.patients.reverse().map((patient) => (
                <Tr>
                  <Td>
                    <b>{patient.id}</b>
                  </Td>
                  <Td>
                    <b>{patient.firstname}</b>
                  </Td>
                  <Td>
                    <b>{patient.lastname}</b>
                  </Td>
                </Tr>
              ))}
            </Tbody>
          </Table>
        </Container>
        );
      </div>
    );
  }
}

export default Patient;
 

Мой контроллер Laravel для поиска :

   public function search($key)
    {
        return Patient::where('name','Like',"%$key%")->get();
    }
 

Маршрут Ларавель :

 Route::get('/search/{key}/', [PatientController::class, 'search']);