React.js: метод setState, устанавливающий переменную в строку вместо объекта ... есть ли обходной путь? - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь получить простой элемент JSON из файла express.js.Я пытаюсь React назначить его переменной состояния на переднем конце.Я использую этот код для этого:

componentDidMount() {
    fetch("/user")
    .then(response => response.json())
    .then(result => this.setState({myUser:result}))
}

Но когда я запускаю typeof myUser после этой команды setState, он говорит строку вместо объекта.Я пытался использовать JSON.parse () и т. Д. Но либо я получаю сообщение об ошибке, либо он продолжает назначать данные в виде строки, а не JSON.Какой синтаксис мне нужно использовать в этом контексте выборки-затем, чтобы принудительно назначить назначение данных JSON?

Я прочитал эту ссылку :

С этимкод:

componentDidMount(){
  fetch('https://abx.com/data/tool.json').then(response =>{
    if (!response.ok) throw Error('Response not ok')

    return response.json(); // This is built in JSON.parse wrapped as a Promise
  }).then(json => {
    this.setState({"sections" : json});
  }).catch(err =>{
    console.log(err);
  });
}

Но это не решает проблему.Я запускал этот код прямо в моем приложении дословно.Когда я запускаю typeof для переменной, он говорит строку вместо объекта.Я просмотрел другие сообщения о переполнении стека, но не нашел решения этой проблемы.

1 Ответ

0 голосов
/ 09 июня 2018

Я выяснил, что происходит не так (после многих часов экспериментов): на стороне сервер я создавал «доморощенный» объект JSON, используя конкатенацию строк и переменных.Я также попытался создать объект JSON, выполнив следующее:

var str = "name:" + name + ", department:" + department var user = {str};

Оба они не работали незаметно ... несмотря на то, что я пробовал разные типы гаджетов на стороне клиента, яне удалось заставить React интерпретировать данные как объект JSON.Но затем у меня возникла идея построить JSON на стороне сервера (в Express.js) следующим образом:

var user = {}; user["name"] = name; user["department"] = department;

Это сразу же прояснило ситуацию на стороне сервера и клиентабоковая сторона.При использовании setState () в React теперь он задает значение как объект (который всегда был целью).

Я думаю, что это может быть полезно для других ... если React, кажется, не понимаетJSON, возможно, он отправляется с сервера в слегка некорректном формате.

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