Как избежать двойного звонка в службу реагирования? - PullRequest
0 голосов

Код вызывает API, который доставит мне гонки дорожки через событие, которое захватывает его TrackID и получает соответствующие гонки этой дорожки, но мне нужны эти данные для сохранения, так как когда я нажимаю наотслеживать не один раз повторные вызовы в службе, что не является оптимальным.

**Method with API call API**

raceTrackRequest(data){

        this.getConfiguration();
        const url = this.baseURL + 'BusRace/GetRacesTrack';

        const requestJSON = {
            DGSReq: {
                InParams: {
                    LogonSessionID: 1,
                    ProfileID: 1,
                    TrackID: data.id,
                    RaceDate: this.actualDate
                }
            }
        };

        axios.post(url, requestJSON)
            .then((response) => {
                AppDispatcher.dispatch({
                    type: ActionTypes.GET_RACE_TRACK,
                    data: {...response.data.DGSResp, ...{TrackID: data.id}}
                });
            })
            .catch((error) => {
                console.log(error);
            });
    }

**Store **

    getInitialState() {
        return {  
            racesTrack: {
                Races: []
            }
        };
    }

    reduce(state, action) {
        let newState = Object.assign({}, state);
        switch (action.type) {
            case ActionTypes.GET_RACE_TRACK:
                newState.selectedOptions.track = action.data.TrackID;
                newState.racesTrack = action.data;
                break;
            default:
                newState = state;
        }
        return newState;
    }

**Component**

    static getStores() {
        return [ConfigStore, PlayerStore];
    };

    static calculateState() {
        const data = ConfigStore.getState();
        return {
            data: data
        };
    };

    componentDidMount() {
        let params = {...this.state, ...{actionType: ActionTypes.LOAD_CONFIG}};
        ActionCreators.actionTrigger(params);
    }

    handleClick(actionType, id, name, post, distance, purse, surface, trackcond, WagerTypes, entry) {
        const params = {
            actionType: actionType,
            id: id,
            name,
            post: post,
            distance: distance,
            purse: purse,
            surface: surface,
            trackcond: trackcond,
            WagerTypes: WagerTypes,
            entry: entry

        };

        ActionCreators.actionTrigger(params);
        this.setState ({
            raceID: id,
            name,
            post: post,
            distance: distance,
            purse: purse,
            surface: surface,
            trackcond: trackcond,
            WagerTypes: WagerTypes,
            render: entry

        });

    };


    render() {
        const races = this.state.data.racesTrack.Races;
        const racesList = [];

        if(races){
            races.forEach((race) => {
                racesList.push(
                    <span className="badge" style={{cursor: 'pointer'}} key={race['race-id']} onClick={() =>
                this.handleClick(ActionTypes.GET_RACE_ENTRIES,
                                race['race-id'],
                                race['race-desc'],
                                race['post-time'],
                                race['distance'],
                                race['purse'],
                                race['surface'],
                                race['trackCond'],
                                race['WagerTypes']
                                )}>{race['race-number']}
                </span>
                );
            });
        }

        return (
            <div className={styles.container}>
            </div>
        );
    }
}

**Component tracks who calls racesTrack**

class TracksBar extends Component {

    static getStores() {
        return [ConfigStore];
    };

    static calculateState() {
        const configData = ConfigStore.getState();
        return {
            configInfo: configData
        };

    };

    handleClick(actionType, id) {
        const params = {actionType: actionType, id: id};
        ActionCreators.actionTrigger(params);
    };

    render() {

        const showTracks = this.state.configInfo.tracks.TrackList;
        const tracklist = [];
        const harnessList = [];
        const greyList = [];

        if(showTracks){
            showTracks.forEach((track) => {
                if(track['track-type'] === 0) {
                    tracklist.push(
                        <tr key={track['track-id']} onClick={() => this.handleClick(ActionTypes.GET_RACE_TRACK,track['track-id'])}>
                            <td className="col-sm-6"><Link to="/races">{track['track-name']}</Link></td>
                        </tr>
                    )
                } else if(track['track-type'] === 1) {
                    harnessList.push(
                        <tr key={track['track-id']} onClick={() => this.handleClick(ActionTypes.GET_RACE_TRACK,track['track-id'])}>
                            <td className="col-sm-6"><Link to="/races">{track['track-name']}</Link></td>
                        </tr>
                    )
                } else if(track['track-type'] === 2) {
                    greyList.push(
                        <tr key={track['track-id']} onClick={() => this.handleClick(ActionTypes.GET_RACE_TRACK,track['track-id'])}>
                            <td className="col-sm-6"><Link to="/races">{track['track-name']}</Link></td>
                        </tr>
                    )
                }
            });
        }

        else{
            console.log('no hay tracks')
        }

        return (
            <div className={styles.main}>

            </div>
        );
    }
}

Есть ли способ поместить этот объект, который возвращает службу, в массив, чтобы при повторном нажатии снова перейти к этому массиву ипроверить, существуют ли эти данные, чтобы они больше не вызывали службу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...