Из реакционных документов:
setState()
не сразу мутируетthis.state
, а создает ожидающий переход состояния. Доступ кthis.state
после вызова этого метода может потенциально вернуть существующее значение.https://facebook.github.io/react/docs/component-api.html
Что вы можете сделать, это передать функцию обратного вызова
setState
, которая запускается после обновления состояния:this.setState( {autocomplete_from: ...}, function () { ... at this point the state of the component is set ... } )
URL имеет встроенный редирект. Обычно такие перенаправления, особенно для URL-адресов, предназначенных для браузеров (которые явно не являются URL-адресами в формате mp3), передаются как HTTP 301 «Перемещено навсегда» (а иногда и 302 «Перемещено временно»), при этом правильный URL-адрес отправляется в Location
заголовок. Текст, который вы видите (загруженные вами 315 байт), является просто «запасным» HTML-кодом, в котором также указано, что содержимое было перемещено. К счастью, нет необходимости разбирать это.
HTTP-браузер кода openStream URL-адреса является очень простым и не следует перенаправлениям. Вам нужен API, который делает. URLConnection (также из основных библиотек) может это сделать, но он не следует перенаправлениям, если перенаправление переключается с http на https или наоборот, поэтому вы можете этого не делать. На всякий случай, если вы это сделаете:
File target = /*...*/;
HttpURLConnection con = (HttpURLConnection) new URL(link).openConnection();
con.setInstanceFollowRedirects(true);
try (InputStream in = con.getInputStream()) {
Files.copy(in, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
Если вышеприведенное не принесло пользы (возможно, из-за проблемы с перенаправлением HTTP / HTTPS), я предлагаю выбрать реального HTTP-клиента, которого стандартный API не предоставляет. Я предлагаю OkHttp .