Как сделать пост после вызова из кода ReactJS?

Я новичок в ReactJS и пользовательском интерфейсе и хотел узнать, как сделать простой вызов POST на основе REST из кода ReactJS.

Если есть какой-либо пример, это было бы очень полезно.

Ответы

Ответ 1

Прямо из документа React:

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    firstParam: 'yourValue',
    secondParam: 'yourOtherValue',
  })
})

(Это публикация JSON, но вы также можете сделать, например, multipart-form.)

Ответ 2

Реакция действительно не имеет никакого мнения о том, как вы совершаете вызовы REST. В принципе, вы можете выбрать любую библиотеку AJAX, которая вам нравится для этой задачи.

Самый простой способ с простым старым JavaScript - это примерно что-то вроде этого:

var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.send(data);

В современных браузерах вы также можете использовать fetch.

Если у вас есть больше компонентов, которые делают REST-вызовы, может иметь смысл поставить такую логику в класс, который может использоваться во всех компонентах. Например, RESTClient.post(…)

Ответ 3

Еще один недавно популярный пакет: axios

Установить: npm install axios --save

Простые запросы на основе Promise


axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Ответ 4

вы можете установить суперагент

npm install superagent --save

затем для отправки почтового вызова на сервер

import request from "../../node_modules/superagent/superagent";

request
.post('http://localhost/userLogin')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({ username: "username", password: "password" })
.end(function(err, res){
console.log(res.text);
});  

Ответ 5

По состоянию на 2018 год и более, у вас есть более современный вариант, который должен включать async/wait в вашем приложении ReactJS. Можно использовать клиентскую библиотеку HTTP на основе обещаний, такую как axios. Пример кода приведен ниже:

import axios from 'axios';
...
class Login extends Component {
    constructor(props, context) {
        super(props, context);
        this.onLogin = this.onLogin.bind(this);
        ...
    }
    async onLogin() {
        const { email, password } = this.state;
        try {
           const response = await axios.post('/login', { email, password });
           console.log(response);
        } catch (err) {
           ...
        }
    }
    ...
}

Ответ 6

Я думаю, что этот путь также нормальный путь. Но извините, я не могу описать по-английски ((

    submitHandler = e => {
    e.preventDefault()
    console.log(this.state)
    fetch('http://localhost:5000/questions',{
        method: 'POST',
        headers: {
            Accept: 'application/json',
                    'Content-Type': 'application/json',
        },
        body: JSON.stringify(this.state)
    }).then(response => {
            console.log(response)
        })
        .catch(error =>{
            console.log(error)
        })
    
}

Ответ 7

Ниже приведен список сопоставлений библиотек ajax на основе функций и поддержки. Я предпочитаю использовать выборку только для разработки на стороне клиента или изоморфной выборки для использования как на стороне клиента, так и на стороне сервера.

Для получения дополнительной информации об изоморфной выборке vs fetch

Ответ 8

Вот пример: https://jsfiddle.net/69z2wepo/9888/

$.ajax({
    type: 'POST',
    url: '/some/url',
    data: data
  })
  .done(function(result) {
    this.clearForm();
    this.setState({result:result});   
  }.bind(this)
  .fail(function(jqXhr) {
    console.log('failed to register');
  });

Он использовал метод jquery.ajax но вы можете легко заменить его на основанные на AJAX libs, такие как axios, superagent или fetch.