Удаление данных с таблицы React/Redux

132
14 декабря 2020, 00:30

Пытаюсь удалить данные с таблицы, и никак не пойму что делаю не так. На сервере все нормально удаляется, а на клиенте обновленную табличку увижу только после перезагрузки страницы, как сделать, чтобы на клиенте сразу было видно, что я удалил?

Так выглядит action:

import {DELETE_BOOK, FETCH_BOOK} from "../constants/constants"; 
import axios from 'axios' 
 
const apiUrl = 'http://localhost:4200/book/'; 
 
export const deleteBookSuccess = id => { 
    return { 
        type: DELETE_BOOK, 
        payload: id 
    } 
}; 
 
export const deleteBook = id => { 
    return (dispatch) => { 
        return axios.get(`${apiUrl}/delete/${id}`) 
            .then(response => { 
                dispatch(deleteBookSuccess(response.data)) 
            }) 
            .catch(error => { 
                throw(error); 
            }); 
    }; 
};

reducer:

import {DELETE_BOOK} from "../constants/constants"; 
 
export default (state = [], action) => { 
    switch (action.type){ 
        case DELETE_BOOK: 
            return state.filter(book => book._id !== action.payload.id); 
        default: 
            return state; 
    } 
}

import React, {Component, Fragment} from 'react' 
import {connect} from 'react-redux' 
import PropTypes from 'prop-types' 
 
import TableBooks from '../components/TableBooks' 
import {fetchAllBooks, deleteBook} from "../actions/books"; 
class StoreBooks extends Component { 
 
    componentDidMount() { 
        this.props.allBooks(); 
    }; 
     
    render() {   
        return ( 
            <Fragment> 
                <TableBooks books={this.props.books} 
                            deleteBook={this.props.onDeleteBook}/> 
            </Fragment> 
        ) 
    } 
} 
 
StoreBooks.propTypes = { 
    books: PropTypes.array, 
    allBooks: PropTypes.func.isRequired, 
    onDeleteBook: PropTypes.func.isRequired 
}; 
 
const mapDispatchToProps = dispatch => { 
    return { 
        onDeleteBook: id => { 
            dispatch(deleteBook(id)) 
        }, 
        allBooks: book => { 
            dispatch(fetchAllBooks(book)) 
        } 
    } 
} 
 
const mapStateToProps = state => { 
    return { 
        books: state.books 
    } 
}; 
 
export default connect(mapStateToProps, mapDispatchToProps)(StoreBooks)

import React, {Fragment} from 'react' 
import TableRow from '../TableRow' 
 
const TableBooks = ({books, deleteBook}) => { 
 
    const elements = books.map(book => { 
        return ( 
            <TableRow book={book} 
                      key={book._id} 
                      deleteBook={deleteBook}/> 
        ) 
    }); 
 
 
    return ( 
        <Fragment> 
            <div className={"table-users"}> 
                <div className={"header"}>Книги</div> 
                <table cellSpacing="0" id="table-to-xls"> 
                    <tbody> 
                    <tr> 
                        <th>Название</th> 
                        <th>Автор</th> 
                        <th>Издательство</th> 
                        <th>Серия</th> 
                        <th width="230">Цена</th> 
                    </tr> 
                    {elements} 
                    </tbody> 
                </table> 
            </div> 
        </Fragment> 
    ) 
}; 
 
export default TableBooks

import React from 'react' 
import {Link} from 'react-router-dom' 
 
const TableRow = ({book, deleteBook}) => { 
    return ( 
        <tr> 
            <td> 
                {book.titleBook} 
            </td> 
            <td> 
                {book.authorBook} 
            </td> 
            <td> 
                {book.publishing} 
            </td> 
            <td> 
                {book.series} 
            </td> 
            <td>{book.price}</td> 
            <td> 
                <button><Link to={"/edit/" + book._id}>Редактировать</Link></button> 
            </td> 
            <td> 
                <button onClick={() => deleteBook(book._id)}>Delete</button> 
            </td> 
        </tr> 
    ) 
}; 
 
 
export default TableRow;

READ ALSO
Помогите пожалуйста, с объектами

Помогите пожалуйста, с объектами

Мне нужно чтобы линии вертикальные и горизонтальные двигались таким образом, чтобы создавалось ощущение 3-мерной линейной плоскости сделать...

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

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

Есть работающий код появления, скрытия блока div по кнопке - ссылкеПроблема заключается в том, что в всплывающем блоке boxs, которому присвоен...

117
Как сделать из 25 функций одну? [закрыт]

Как сделать из 25 функций одну? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

123
Добавление в бд WEB SQL через JS

Добавление в бд WEB SQL через JS

Нужна помощьЕсть бд через openDatabase, нужно сделать так, чтобы кнопка, например, переносила в таблицу данные из тэгов

103