Проблема, с которой я сталкиваюсь, заключается в том, что mapDispatchToProps отправляется целиком, и я хочу, чтобы она отправлялась только при нажатии на кнопку удаления.
Это мой класс, его выборка fetchList хорошаявсе работает, как и ожидалось, но когда я добавил кнопку удаления, это, кажется, испортило все это, кажется, вызывает удаление для каждого обновления на странице, есть идеи, почему?
Может ли это быть render()
, где я создаю Button
, может быть, оно срабатывает без моего нажатия на него?Просто путем создания списка, потому что он запускается для каждого случая, когда каждый itemInList создается через карту.
class List extends Component {
componentWillMount() {
this.props.fetchList();
}
componentWillReceiveProps(nextProps) {
if (nextProps.newItem) {
this.props.list.unshift(nextProps.newItem);
}
}
onDelete = (id) => {
this.props.deleteItem(id);
}
render() {
const listItems = this.props.list.map(itemInList => (
<div key={itemInList.id}>
<h3 className="title__font smaller">{itemInList.title}
<Button
btnType="Delete"
onClick={this.onDelete(itemInList.id)}>
<i className="fas fa-trash-alt"></i>
</Button>
</h3>
<p className="body__font">{itemInList.body}</p>
</div>
));
return (
<div>
<h1 className="title__font">List</h1>
{ listItems }
</div>
);
};
};
List.propTypes = {
fetchList: PropTypes.func.isRequired,
list: PropTypes.array.isRequired,
newItem: PropTypes.object
};
const mapStateToProps = state => ({
list: state.list.items,
newItem: state.list.item
});
const mapDispatchToProps = dispatch => {
return {
fetchList: () => dispatch( actions.fetchList() ),
deleteItem: (id) => dispatch( actions.deleteItem(id) )
};
};
export default connect(mapStateToProps, mapDispatchToProps)(List);
Это действия для элемента удаления:
export const deleteItem = (id) => dispatch => {
console.log(id);
dispatch({
type: actionTypes.DELETE_ITEM,
payload: filtered
})
};
Этот журнал запускается 10 раз в файле действий.