Работая над приложением react и продолжая получать ожидаемую ошибку, прослушиватель «onChange» должен быть функцией, вместо этого получил значение типа «объект»

#reactjs

Вопрос:

Мне кажется, что передается функция, и я совершенно не понимаю, что делать, чтобы исправить эту ошибку. Я знаю, что передача этого кода непосредственно в OnChanged работает, но по какой-то причине, когда метод onSearchChange передается в качестве параметра в поле поиска, он думает, что это объект

Вот код, о котором идет речь

 import "./tachyons";
import Searchbox from "./Searchbox";
import CardList from "./CardList";
import {robots} from "./robots";


class App extends React.Component {

    constructor(){
        super();
        this.state = {
            robots:robots,
            searchfield:""
        }
    }
    onSearchChange = (event)=>{
        //console.log(event);
        const filteredRobots = this.state.robots.filter(robots=>{
            return robots.name.toLowerCase().includes(this.state.searchfield.toLowerCase());
        });
        console.log(filteredRobots);
    }

    render () {
        return (
            <div className='tc'>
                <h1 className='f1'>RoboFriends</h1>
                <Searchbox searchChange = {this.onSearchChange}/>
                <CardList robots={this.state.robots}/>
            </div>
        );
    }
}

export default App;
 
 import App from "./App"
const Searchbox  = (searchfield, searchChange)=>{
  return (
    <div className="pa2">
      <input
        className = "pa3 ba b--green bg-lightest-blue"
        type="search"
        placeholder="search robots"
        onChange = {searchChange}
      />
    </div>
  );
}
export default Searchbox;
 

Комментарии:

1. Объект props является первым аргументом вашего функционального компонента. Вы можете уничтожить объект реквизита ({searchfield, onSearchChange})=>

Ответ №1:

Ваш компонент поля поиска не разрушает реквизиты:

 const Searchbox = (searchfield, onSearchChange)=>
 

против.

 const Searchbox = ({searchfield, onSearchChange})=>
 

Ответ №2:

Вы неправильно используете реквизит в Searchbox компоненте. Вам нужно обновить вот так:

 const Searchbox  = ({searchfield, onSearchChange})=>{...}