Редактирование таблицы React

116
01 ноября 2019, 06:50

Возникла следующая ситуация, мне необходимо выполнить операцию редактирования полей в таблице. Делаю я это следующим образом:

import React, {Component} from 'react' 
import axios from 'axios' 
import TableRow from '../TableRow' 
 
export default class IndexComponent extends Component { 
    constructor(props) { 
        super(props); 
        this.state = {books: []}; 
    } 
 
    getRequest() { 
        axios.get('http://localhost:4200/book/') 
            .then(response => { 
                this.setState({books: response.data}) 
            }) 
            .catch(error => { 
                console.log(error) 
            }) 
    } 
 
    componentDidMount() { 
        console.log('mount') 
        this.getRequest(); 
    } 
 
    componentDidUpdate() { 
        this.getRequest(); 
        console.log('update') 
    } 
 
 
    tabRow() { 
        return this.state.books.map((object, i) => { 
            return <TableRow obj={object} 
                             key={i} /> 
        }) 
    } 
 
    render() { 
        return ( 
            <div className={"table-users"}> 
                <div className={"header"}>Книги</div> 
                <table cellSpacing="0"> 
                    <tbody> 
                    <tr> 
                        <th>Название</th> 
                        <th>Автор</th> 
                        <th>Издательство</th> 
                        <th>Серия</th> 
                        <th width="230">ID товара</th> 
                    </tr> 
                    {this.tabRow()} 
                    </tbody> 
                </table> 
            </div> 
        ) 
    } 
}

import React, {PureComponent} from 'react'; 
import axios from 'axios'; 
import '../AddBook/add-book.scss'; 
 
export default class EditBook extends PureComponent { 
 
    constructor(props) { 
        super(props); 
        this.state = { 
            titleBook: '', 
            authorBook: '', 
            publishing: '', 
            series: '', 
            idBook: '', 
        }; 
    } 
 
    componentDidMount() { 
        axios.get('http://localhost:4200/book/edit/' + this.props.match.params.id) 
            .then(response => { 
                this.setState({ 
                    titleBook: response.data.titleBook, 
                    authorBook: response.data.authorBook, 
                    publishing: response.data.publishing, 
                    series: response.data.series, 
                    idBook: response.data.idBook 
                }) 
            }) 
            .catch(err => { 
                console.log(err) 
            }) 
    } 
 
    onChangeTitleBook = (e) => { 
        this.setState({ 
            titleBook: e.target.value 
        }) 
    } 
 
    onChangeAuthorBook = (e) => { 
        this.setState({ 
            authorBook: e.target.value 
        }) 
    } 
 
    onChangePublishing = (e) => { 
        this.setState({ 
            publishing: e.target.value 
        }) 
    } 
 
    onChangeSeriesBook = (e) => { 
        this.setState({ 
            series: e.target.value 
        }) 
    } 
 
    onChangeIdBook = (e) => { 
        this.setState({ 
            idBook: e.target.value 
        }) 
    } 
 
    onSubmit = (e) => { 
        e.preventDefault(); 
        const book = { 
            titleBook: this.state.titleBook, 
            authorBook: this.state.authorBook, 
            publishing: this.state.publishing, 
            series: this.state.series, 
            idBook: this.state.idBook 
        } 
 
        axios.post('http://localhost:4200/book/update/' + this.props.match.params.id, book) 
            .then(res => console.log(res)) 
        this.props.history.push('/index'); 
    } 
 
    render() { 
        return ( 
            <> 
                <h1>Редактировать книгу</h1> 
                <form className={"form_add-book"} onSubmit={this.onSubmit}> 
                    <div className={"form-group"}> 
                        <label> 
                            Название: 
                            <input type="text" className={"form-control"} value={this.state.titleBook} 
                                   onChange={this.onChangeTitleBook} required={true}/> 
                        </label> 
                    </div> 
                    <div className={"form-group"}> 
                        <label> 
                            Автор: 
                            <input type="text" className={"form-control"} value={this.state.authorBook} 
                                   onChange={this.onChangeAuthorBook}/> 
                        </label> 
                    </div> 
                    <div className={"form-group"}> 
                        <label> 
                            Издательство: 
                            <input type="text" className={"form-control"} value={this.state.publishing} 
                                   onChange={this.onChangePublishing}/> 
                        </label> 
                    </div> 
                    <div className={"form-group"}> 
                        <label> 
                            Серия: 
                            <input type="text" className={"form-control"} value={this.state.series} 
                                   onChange={this.onChangeSeriesBook}/> 
                        </label> 
                    </div> 
                    <div className={"form-group"}> 
                        <label> 
                            ID товара: 
                            <input type="text" className={"form-control"} value={this.state.idBook} 
                                   onChange={this.onChangeIdBook}/> 
                        </label> 
                    </div> 
                    <div className={"form-group"}> 
                        <input type="submit" value={"Сохранить"} className={"form-control"}/> 
                    </div> 
 
                </form> 
            </> 
        ) 
    } 
}

Редактирование происходит, таблица меняется, вот только в консоли выполняется бесконечный цикл. Полагаю, это происходит из-за вызова setState в componentDidUpdate. Как в таком случае избавиться от бесконечного цикла?

READ ALSO
Как взять текст из элимента &lt;div&gt; и при этом не получить лишние теги?

Как взять текст из элимента <div> и при этом не получить лишние теги?

Как при нажатии Enter не получить лишние теги? Как у соцсети В контакте если не введено не чего то поле ввода остается пустым сообщение не добавляется!!!...

104
Ошибка в TOR браузере на iOS при установке Websocket соединения: Can&#39;t find variable: __endless

Ошибка в TOR браузере на iOS при установке Websocket соединения: Can't find variable: __endless

Есть websocket сервер на NodeJS который спрятан за TOR и доступен по onion ссылке

107
Проверка на наличие значения в атрибуте lang тега &lt;html&gt;

Проверка на наличие значения в атрибуте lang тега <html>

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

116