Как исправить Невозможно прочитать свойство 'delete' из неопределенного - PullRequest
0 голосов
/ 18 апреля 2019

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

const Todo = props => (
<tr>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_description}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_responsible}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_priority}</td>
    <td className="TableTitle">
        <Link to={"/edit/"+props.todo._id}  className="a_edit"><img src={edit} alt="Edytuj" className="favicon"/></Link>
        <button onSubmit={this.delete}>Usunięcie</button>
    </td>
</tr>

)

constructor(props) {
    super(props);
    this.delete = this.delete.bind(this);
    this.state = {todos: []};
}

delete(){
    axios.get('http://localhost:4000/todos/delete'+this.props.obj._id)
    .then(console.log('Deleted'))
    .catch(err =>console.log(err))
}

есть метод удаления:

constructor(props) {
    super(props);
    this.OnRemoveTodo = this.OnRemoveTodo.bind(this);
    this.state = {todos: []};
}
OnRemoveTodo(){
    axios.get('http://localhost:4000/todos/delete'+this.todo._id)
    .then(console.log('Deleted'))
    .catch(err =>console.log(err))
}

есть изменение const Todo:

const Todo = props => (
<tr>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_description}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_responsible}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_priority}</td>
    <td className="TableTitle">
        <Link to={"/edit/"+props.todo._id}  className="a_edit"><img src={edit} alt="Edytuj" className="favicon"/></Link>
        <button onSubmit={props.OnRemoveTodo}><img src={trash} alt="Usuń" className="favicon"/></button>
    </td>
</tr>

)

и вот код бэкэндак которому я пытаюсь обратиться

todoRoutes.route('/delete/:id').get(function (req, res) {
Todo.findByIdAndDelete(req.params.id, function(err, todo) {
    if(err) res.json(err);
    else res.json('Successfully removed');
});

});

1 Ответ

1 голос
/ 18 апреля 2019

метод this.delete отсутствует. Вы используете функциональный компонент. я забыл использовать props.delete

const Todo = props => (
<tr>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_description}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_responsible}</td>
    <td className={props.todo.todo_completed ? 'completed' : 'TableText'}>{props.todo.todo_priority}</td>
    <td className="TableTitle">
        <Link to={"/edit/"+props.todo._id}  className="a_edit"><img src={edit} alt="Edytuj" className="favicon"/></Link>
        <button onSubmit={props.delete}>Usunięcie</button>
    </td>
</tr>


...