Я пытаюсь реализовать Api в моем демонстрационном приложении React redux Когда я дважды нажимаю на событие, вызываемое моим вызовом Api

Привет, я пытаюсь реализовать поддельный API в моем демонстрационном приложении React Redux, когда я запускаю событие Я получаю ответ дважды Я не знаю, где я ошибся здесь Я делюсь своим кодом, просмотрите его

User.tsx

import React, { useState } from 'react';

import { useDispatch, useSelector } from "react-redux";
import { RootState } from "./Store";
import { GetUser } from './actions/UserActions';

function User() {
    const dispatch = useDispatch();
    const [userName, setUserName] = useState("");
    const userState = useSelector((state: RootState) => state.user);
    const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => setUserName(event.target.value);
    const handleSubmit = () => dispatch(GetUser(userName));

    return (
        <div >
            <input type="text" onChange={handleChange} />
            <button onClick={handleSubmit}>Search</button>
        </div>
    );
}

export default User;

UserActions.tsx

import { Dispatch } from "redux"
import {
  UserDispatchTypes,
  // UserType,
  USER_FAIL,
  USER_LOADING,
  USER_SUCCESS,
} from "./UserActionTypes"
import axios from "axios"

export const GetUser = (user: string) => async (
  dispatch: Dispatch<UserDispatchTypes>
) => {
  try {
    dispatch({
      type: USER_LOADING,
    })
    console.log("USer Action load")
    
    const articleAPI = "https://reqres.in/api/articles"
    
   const article = { title: "React Hooks POST Request Example" }
    

    
    const res1 = await axios.post(
      articleAPI,
      article 
      // , {
    )
    console.log(res1.data, "res1 response")
    dispatch({
      type: USER_SUCCESS,

      payload: res1.data,
    })
  } catch (e) {
    dispatch({
      type: USER_FAIL,
    })
  }
}

UserREducer

import {
  UserDispatchTypes,
  UserType,
  USER_FAIL,
  USER_LOADING,
  USER_SUCCESS,
} from "../actions/UserActionTypes"


interface DefaultStateI {
  loading: boolean
  user?: UserType
}

const defaultState: DefaultStateI = {
  loading: false,
}

const userReducer = (
  state = defaultState,
  action: UserDispatchTypes
): DefaultStateI => {
  switch (action.type) {
    case USER_FAIL:
      return {
        ...state,
        loading: false,
      }
    case USER_LOADING:
      return {
        ...state,
        loading: true,
      }
    case USER_SUCCESS:
      return {
        ...state,
        loading: false,
        user:res1.data
      }
    default:
      return state
  }
}

export default userReducer

UseerActionTypes

export const USER_LOADING = 'USER_LOADING'
export const USER_FAIL = 'USER_FAIL'
export const USER_SUCCESS = 'USER_SUCCESS'

export type UserType = { userData: UserAbility[] }


export type UserAbility = {
    user: {
        name: string

        mobile_No: number
    }
}
export interface UserLoading {
    type: typeof USER_LOADING
}

export interface UserFail {
    type: typeof USER_FAIL
}

export interface UserSuccess {
    type: typeof USER_SUCCESS,
    payload: UserType
}

export type UserDispatchTypes = UserLoading | UserFail | UserSuccess

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


person stackoverflow0071    schedule 07.10.2020    source источник
comment
сколько ответов res1 у вас в журнале консоли. Когда-нибудь с политикой CORS браузер вызовет 1-й api (OPTION), чтобы получить разрешение. в случае успеха он вызовет настоящий api. У них такой же URL   -  person san    schedule 07.10.2020
comment
Привет, Сан, я получаю в консоли один ответ res1. а теперь скажите, как мне решить эту проблему?   -  person stackoverflow0071    schedule 07.10.2020
comment
Вы проверяете два запроса. Если два запроса имеют одинаковый URL-адрес, а первый метод api - OPTION, а второй метод api - GET, это предварительные запросы. Ссылка: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS   -  person san    schedule 07.10.2020
comment
Привет, может быть, этот пост может вам помочь: stackoverflow.com/questions/47948008/   -  person Virgile Junique    schedule 07.10.2020
comment
Между прочим, я советую вам попробовать промежуточное программное обеспечение redux Promise, такое как redux-thunk или saga, чтобы иметь возможность автоматически управлять состоянием ожидания / успеха / сбоя и всем, что вы вызываете async :)   -  person Virgile Junique    schedule 07.10.2020