Каждый топор ios дважды запрашивает стрельбу в приложении Reaction-Redux? - PullRequest
1 голос
/ 17 января 2020

Есть много похожих вопросов, но ничто не может помочь мне. Каждый запрос Axe ios запускается дважды в моем приложении прореагировавшего узла. Я использую express фреймворк узла. Если я возьму пример страницы входа в систему, то действие отправляется со страницы входа в систему как:

import React, { useState } from "react";
import { connect } from "react-redux";
import { Link, Redirect } from "react-router-dom";
import { login } from "../../actions/auth";
import PropTypes from "prop-types";

const Login = ({ login, isAuthenticated }) => {
  const [formData, setFormData] = useState({
    email: "",
    password: ""
  });

  const { email, password } = formData;
  const onChange = e =>
    setFormData({ ...formData, [e.target.name]: e.target.value });

  const onSubmit = async e => {
    e.preventDefault();
    login({ email, password }); // this is action
  };
  //redirect if login
  if (isAuthenticated) {
    return <Redirect to="/dashboard" />;
  }
  return (
    <section className="container">
      <h1 className="large text-primary">Sign In</h1>
      <p className="lead">
        <i class="fa fa-user" aria-hidden="true"></i>Sign in your Account
      </p>
      <form className="form" onSubmit={e => onSubmit(e)}>
        <div className="form-group">
          <input
            type="email"
            placeholder="Email Address"
            name="email"
            value={email}
            onChange={e => onChange(e)}
            required
          />
        </div>
        <div className="form-group">
          <input
            type="password"
            placeholder="Password"
            name="password"
            minLength="6"
            value={password}
            onChange={e => onChange(e)}
            required
          />
        </div>
        <input type="submit" className="btn btn-primary" value="Login" />
      </form>
      <p className="my-1">
        don't have an account? <Link to="/register">Sign Up</Link>
      </p>
    </section>
  );
};

Login.propTypes = {
  login: PropTypes.func.isRequired,
  isAuthenticated: PropTypes.bool
};

const mapStateToProps = state => ({
  isAuthenticated: state.auth.isAuthenticated
});

export default connect(mapStateToProps, { login })(Login);

А действие пользователя похоже на

export const login = ({ email, password }) => async dispatch => {
  const config = {
    headers: {
      "Content-Type": "application/json"
    }
  };
  const body = JSON.stringify({ email, password });
  var res = "";
  try {
    //console.log('LOgin called'+ new Date());
    res = await axios.post(baseURL + "/api/users/login", body, config);
    //  console.log(res.data.token);

    //dispatch(setAlert('user login','primary'));
    const { token } = res.data.token;
    // Set token to ls
    localStorage.setItem("token", token);
    dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
    });

    dispatch(loadUser());
  } catch (err) {
    const errors = err.response.data.errors;

    if (errors) {
      errors.forEach(error => dispatch(setAlert(error.msg, "danger")));
    }

    dispatch({
      type: LOGIN_FAIL,
      payload: res.data
    });
  }
};

Когда я нажимаю login, тогда я получаю вошел в систему, но запрос прошел дважды на api/users/login, но почему? Я не смог найти причину, он выполняется со всеми запросами ax ios в моем приложении. Экран запроса здесь request screen from firebug

1 Ответ

3 голосов
/ 17 января 2020

Вы видите дополнительный OPTION запрос для каждого запроса, сделанного Ax ios. Этот дополнительный запрос OPTION выполняется вашим браузером, поскольку он обнаруживает перекрестное происхождение. Вот почему и как выполняется дополнительный запрос OPTION: Почему отправляется запрос OPTIONS и можно ли его отключить?

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