Задать вопрос
@Ozzingus

Почему при AJAX запросе приходит 2 ответа?

Добрый день!
Краткая суть проекта: получаем от сервера список космических запусков и выводим в таблицу OldTable2. Дату запусков можно изменять с помощью RangePicker
Почему то, при использовании componentDidMount ответ приходит 2 раза.
Можно было бы и так оставить, но если вызвать любую функцию(к примеру нужно показать модальное окно если нет запусков за выбранное время, то она сработает 2 раза.
Я пробовал при вызове фукнции launchDateButtonOnChange не вызывать fetchOldLaunches, а сразу componentDidMount, но ответ так же приходит 2 раза. Проверил и другие запросы, так же по 2 ответа.

Тут можно посмотреть ответ от сервера, есть данные есть

Если данных нет

Вывод консоли при первоначальной загрузке страницы
5ec510e822b36981721260.png


Вывод консоли если изменить дату и если данных нет

5ec512fbb5340071605817.png
5ec512e9554b5096776098.png


index.js

import React, { Component } from 'react'
import { Layout, Menu, DatePicker } from 'antd'
import OldTable2 from '../LaunchCatalog/component/TableOld2/TableOld2'
import moment from 'moment'

const { Header, Content, Footer } = Layout
const { RangePicker } = DatePicker
let oldurl = 'https://launchlibrary.net/1.4/launch?startdate=' + moment('2020').format('YYYY-MM-DD') + '&enddate=' + moment().format('YYYY-MM-DD') + '&limit=10000&fields=name,net,location,status,rocket,mapURL,countryCode'

class LayoutContainer extends Component {
    constructor(props) {
        super(props)
        this.state = {
            launchOldData: null,
        }
        this.launchDateButtonOnChange = this.launchDateButtonOnChange.bind(this)
    }

    fetchOldLaunches(oldurl) {
        fetch(oldurl)
            .then(response => response.json())
            .then(data => this.setState({ launchOldData: data }))
    }

    componentDidMount() {
        fetch(oldurl)
            .then(response => response.json())
            .then((data) => { this.setState({ launchOldData: data }) })
    }

    launchDateButtonOnChange(date, dateString) {
        oldurl = 'https://launchlibrary.net/1.4/launch?startdate=' + dateString[0] + '&enddate=' + dateString[1] + '&limit=10000&fields=name,net,location,status,rocket,mapURL,countryCode'
        this.fetchOldLaunches(oldurl)
    }
    render() {
        return (
            <Layout id="layout">
                <Header>
                    <Menu theme="dark" mode="horizontal" defaultSelectedKeys={['2']} style={{ textAlign: 'right' }}>
                        <Menu.Item key="1">Статистика</Menu.Item>
                        <Menu.Item key="2">Запуски</Menu.Item>
                    </Menu>
                </Header>

                <Content style={{ padding: '0 50px' }}>
                    <div className="site-layout-content">
                        <RangePicker
                            onChange={this.launchDateButtonOnChange}
                        />

                        <h1 style={{ textAlign: 'center' }}>Состоявшиеся запуски</h1>
                        {this.state.launchOldData
                            ? <OldTable2 launches={this.state.launchOldData.launches} />
                            : <div>Загрузка ... </div>

                        }
                    </div>
                </Content>
                <Footer className="footer">
                    Design © 2020
                        </Footer>
            </Layout>
        )
    }
}

export default LayoutContainer

  • Вопрос задан
  • 103 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
18 дек. 2024, в 13:22
30000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект