React.js:setState方法设置变量为字符串而不是对象...是否有解决方法?

时间:2018-06-09 00:53:18

标签: json string reactjs fetch setstate

我正在尝试从express.js中获取一个简单的JSON元素。我正在尝试将React分配给前端的状态变量。我正在使用此代码:

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

但是当我在这个setState命令之后运行typeof myUser时,它表示字符串而不是对象。我已经尝试过使用JSON.parse()等。但是我得到一个错误,或者它继续将数据分配为字符串而不是JSON。我需要在此fetch-then上下文中使用哪种语法来强制将数据赋值为JSON?

I have read this link

使用此代码:

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时,它表示字符串而不是对象。我查看了Stack Overflow上的其他帖子,但我没有看到解决方案。

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题(经过几个小时的试验): 在服务器方面,我使用字符串和变量连接创建了一个“自行开发”的JSON对象。我还尝试通过这样做来创建JSON对象:

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

这些都没有以微妙的方式工作......尽管在客户端尝试了不同类型的小工具,但我无法让React将数据解释为JSON对象。但后来我有一个想法在服务器端(在Express.js中)构建JSON,如下所示:

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

立即在服务器端和客户端清理了一切。在React中使用setState()时,它现在将值设置为对象(一直是目标)。

我认为这对其他人有用......如果React似乎不理解JSON,也许它是以一种巧妙的错误格式从服务器发送的。