Ваш код немного сбивает с толку, потому что это трудно сказать, почему вы устанавливаете apiURL в SetState, когда я предполагаю, что вы должны вызвать этот URL, чтобы получить данные в формате JSON. Комментирующий делает хороший вывод о настройке архитектуры поиска данных с использованием библиотеки, такой как Redux. Однако, если вы хотите просто сделать Javascript-сообщение с простой ванилью, вы можете сделать что-то вроде ниже. Трудно сказать, нужен ли Json в состоянии вашего компонента, но я предполагаю, что вы это сделали, поэтому я переделал код с учетом этого предположения.
changeUrl: function(evt){
getJson(evt.target.value);
},
getJson: function(newVal) {
var request = new XMLHttpRequest();
request.open('GET', "https://test.holmusk.com/food/search?q=" + newVal, true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
//this callback gets called when the server responds to the ajax call
request.onreadystatechange = function(){
if (request.readyState === 4 && request.status === 200){
var returnedJson = JSON.parse(request.responseText);
//this is where you would want to run setState if you need the returned Json for it.
setState({newJson: returnedJson});
}
else if (request.readyState === 4 && request.status !== 200){
alert('error');
}
};
request.send();
}
Вы не «используете» реакцию на получение данных из API. Реакция - это только компонент вида. Вы можете использовать javascript для создания HTTP-вызовов для получения данных из вашего API. Если вы много делаете с данными, я рекомендую посмотреть на flux/redux/alt. Существует множество библиотек http, которые можно использовать там. Мне нравится использовать https://github.com/mzabriskie/axios или вы даже можете просто использовать $ .get (apiUrl, function (data) {}); – erichardson30