Удалить экземпляр объекта в React: ‘car’ возвращает неопределенный результат

#reactjs

#reactjs

Вопрос:

Я пытаюсь обновить свое приложение, чтобы на каждом отображаемом автомобиле была кнопка удаления, которая удаляла бы автомобиль из базы данных при нажатии.

В моем компоненте deleteButton у меня есть следующее, которое выдает мне сообщение об ошибке car is not defined :

 import React from 'react';

class DeleteButton extends React.Component {
constructor() {
    super();
        this.state = {
        };
        this.handleClick = this.handleClick.bind(this);
}

delete(car){
    const data = this.state.data.filter(i => i.id !== car.id)
    this.setState({data})
  }

render() {
    const label = 'Delete';
        return (
            <button className="delete-btn" onClick={this.delete.bind(this, car)}>{label}</button>
        );
    }
}

export default DeleteButton;
  

Как я должен определять car ?

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

1. Откуда car происходит? Откуда this.state.data происходит? Что внутри this.state.data ?

2. используете ли вы redux? возможно, сейчас самое подходящее время для его реализации, поскольку вам требуется доступ к данным из подкомпонента. Или вы должны создать функцию удаления в родительском, где она может получить доступ к полному списку данных.

3. Я также использую Redux, может быть, это лучший подход?

Ответ №1:

1. Вам нужно перевести car в состояние, подобное этому:

     this.state = {
      car: {
        id: ''
      },
    };
  

Но проблема в данных, вам нужно предоставить данные в качестве реквизитов для компонента удаления.

И затем из реквизитов извлекаются данные не из состояния.

2. Затем функция OnDelete обновляет состояние:

 delete(car){
    const data = this.props.data.filter(i => i.id !== car.id)
    this.setState({car: data})
  }
  

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

1. Спасибо, я добавил это, но получаю can't read property 'bind' of undefined

2. Потому что у вас нет определенной функции handleClick(). Можете ли вы вставить код родительского компонента в то место, где вы вызываете компонент Delete? И удалить код родительского компонента.