handleClick «Ошибка типа: неопределенный не имеет свойств» не может найти то, что не определено

#javascript #reactjs #jsx

#javascript #reactjs #jsx

Вопрос:

Я пытаюсь удалить строку в серверной части, нажав на кнопку, которая отправляет _id строки, подлежащей удалению, но я получаю эту ошибку, указывающую на строку кнопки. Я не могу понять, к чему относится это «неопределенное», чего мне не хватает?

   34 | {
  35 | todos amp;amp; todos.map((todo) => ([
  36 |   <p key={todo._id} >{todo.content}</p>,
> 37 |   <button key={i  }  id="del"  onClick={() => {this.handleClick(todo._id)}}/>
  38 | ]
  39 | ))
  40 | }
 

Мой handleClick выглядит следующим образом:

 useEffect(() => {
const handleClick = (todo_id) => {
  const delTodo = async () => {
    const del = await Axios.delete('http://localhost:3001/todo/'   todo_id)
    .then(() => {
      console.log('deletado!!')
    })
  }
}
}, [])
 

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

1. Функциональных компонентов не имеют this . Также handleClick должно быть объявлено вне ловушки эффекта

Ответ №1:

используйте handleClick вместо this.handleClick .Потому что функционального компонента нет this . А также объявить функцию handleClick снаружи useEffect не обязательно использовать внутри

обновленный

Вы объявляете , что выполняете много функций . просто удалите delTodo функцию и добавьте асинхронность в handleClick

  const handleClick = async (todo_id) => {
    const del = await Axios.delete('http://localhost:3001/todo/'   todo_id)
    .then(() => {
      console.log('deletado!!')
    })
 }

<button key={i  }  id="del"  onClick={() => {handleClick(todo._id)}}/>
 

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

1. сделано так, но теперь ничего не происходит, когда я нажимаю на кнопку, даже ошибки.

2. вы объявили функцию снаружи, а не внутри useEffect

3. Да, по-прежнему ничего, похоже, он не может найти handleClick

4. О, действительно. Можете ли вы предоставить codesandbox.io/s/new

5. codesandbox.io/s/quiet-darkness-fie87?file=/src/TodoList.js

Ответ №2:

Функциональные компоненты не используются this (функции со стрелками также имеют проблемы с этим словом, имейте это в виду). Просто не используй this .