У меня есть прореагировавший / редукционный компонент :
import React, { Component } from 'react';
import { connect } from "react-redux";
import _ from 'lodash';
import {
onDeleteItem,
onChangeItemState
} from '../actions/actions.js'
import {
Button
} from 'reactstrap';
const mapStateToProps = state => ({
trStore: state
});
class Contenttr extends Component {
deleteItem() {
this.props.onDeleteItem(this.props.id);
}
changeItem() {
this.props.onChangeItemState(this.props.id);
}
render() {
return (
<tr>
<td className="text-center"><img src="http://via.placeholder.com/100x50" alt="Logo" /></td>
<td className="text-center">{this.props.keywords}</td>
<td className="text-center">{this.props.place}</td>
<td className="text-center"><Button color="danger" size="sm" onClick={this.deleteItem.bind(this)}>Delete</Button></td>
<td className="text-center"><Button color="primary" size="sm" onClick={this.changeItem.bind(this)}>Change</Button></td>
</tr>
);
}
}
export default connect(mapStateToProps, { onDeleteItem, onChangeItemState })(Contenttr);
Я сделал API , чтобы удалить элемент из mongodb (mongoose):
router.route('/items/:item_id')
// delete the item with this id (accessed at DELETE http://localhost:3001/api/item/:item_id)
.delete(function(req, res) {
Item.remove({
_id: req.params.item_id
}, function(err, item) {
if (err)
res.send(err);
res.json({ message: 'Successfully deleted' });
});
});
В моем редукторе Я использую его таким образом, чтобы удалить его из состояния:
else if (action.type === "DELETE_ITEM") {
const delId = action.id;
const filtered = _.filter(state.filtered,(o) =>
o.id !== delId
);
const itemsList = _.filter(state.filtered,(o) =>
o.id !== delId
);
// console.log('DELETE_ITEM', filtered, "delId", delId);
return {
...state,
filtered,
itemsList
}
Мой файл действия выглядит следующим образом:
export function onDeleteItem(id) {
return (dispatch) => {
axios.delete(`http://localhost:3001/api/items/:${id}`)
.then(res => {
dispatch({type:"DELETE_ITEM", id: id});
})
}
}
Я столкнулся с проблемой, что для удаления элемента с помощью действия мне нужно передать _id от компонента к действию с помощью функции onDeleteItem. Но основной this.props._id
показывает мне undefined
. Как получить этот _id или правильно переписать API?