Ваш Contacts
компонент имеет входные данные, но вызов API выполняется в его родительском App
компоненте.
Вам нужно передать еще один prop
в Contacts
, который является функция , которая будет вызываться при каждом изменении состояния ввода внутри Contacts
.
Пример:
class App extends React.Component {
...
search(inputValue){
fetch(`http://localhost:8000/api/p_list?search=${inputValue}`)
.then(res => res.json())
.then((data) => {
this.setState({ contacts: data })
})
.catch(console.log)
}
render() {
<Contacts contacts={this.state.contacts} onSearch={search}/>
}
Теперь внутри Contacts
компонент:
const Contacts = ({contacts, onSearch}) => {
const [search, setSearch] = useState('');
return (
...
<input onChange={
(e) => {
setSearch(search);
onSearch(e.currentTarget.value);
}
} value={search} .../>
...
)
}
Я только что написал концептуальный код, чтобы он работал, в нем отсутствует bind
и другая конкретная c реализация вашего проекта.
Я настоятельно рекомендую вам реализовать логику c внутри Функция onSearch для задержки вызова API, потому что он будет вызван новой буквой, набранной во входных данных. Это может привести к перегрузке API.
Надеюсь, это поможет.