@Fierfoxik

Как удалить элемент из компонента и из store?

Доброго времени.

При нажатии на кнопку добавить элемент я получаю данные и передаю их в action

данные
{
  "id": "142",
  "author": "46",
  "name": "4646",
  "imgUrl": "data:image/jpeg;base64,/
}


затем в другом компоненте через connect я подключаюсь к store и отрисовываю эти данные
render() {
        return (
                <div className='book-list clearfix'>
                    <h2>Здесь будет ваш список книг!</h2>
                    {this.props.book.map((el, index) =>
                        (el.name.length === 0 && el.author.length === 0) ? console.log(el) :
                            <div className="book-item" key={index} >
                                <div className="book-item__delete-btn" onClick={this.test}></div>
                                <div className="book-item__img">
                                    <img src={el.imgUrl} alt=""/>
                                    <div className="book-item__info">
                                        <div>{el.author}</div>
                                        <div>{el.name }</div>
                                    </div>
                                </div>
                            </div>
                        )}
                </div>

        )
    }
}

function mapStateToProps (state) {
    return {
        book: state
    }
}

const mapDispatchToProps = (dispatch) => ({
    deleteBook: (params) => dispatch(deleteBook(params))
})

export default connect(mapStateToProps,mapDispatchToProps)(BookList)


Подскажите пожалуйста для удаления данных из store стоит в data объекта кидать его id и затем отправлять его как стейт в редьюсер и затем уже используя фильтр чистить его?

reducer
export default function rootReducer(state = [], action) {
    console.log(action);
    switch (action.type) {
        case  'BUTTON_CLICK':
            return [
                ...state,
                action.book
            ];
        case "DELETE_BOOK":
            console.log(state)
            return state.filter(({ id }) => id !== action.book);
    }
    return state;
}
  • Вопрос задан
  • 3158 просмотров
Решения вопроса 1
Да, оперируйте id. Сохраняйте его в action и дальше фильтруйте

function removeSomething(id) {
  return { type: 'RemoveSomething_Action', payload: { id } }
}

function reducer(state = initialState, action) {
  switch(action.type) {
    //...
    case 'RemoveSomething_Action':
      return state.filter(el => el.id !== action.payload.id)
    // ...
  }
}


У вас так и сделано :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы