我正在尝试从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?
使用此代码:
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上的其他帖子,但我没有看到解决方案。
答案 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,也许它是以一种巧妙的错误格式从服务器发送的。