javascript - 在反应组件中使用变量作为全局变量的问题
问题描述
我正在尝试在我的反应组件中使用来自 API 的数据:
let request = new XMLHttpRequest()
let output = []
request.open('GET', 'http://localhost:3005/products/157963', true)
request.onload = function() {
let data = JSON.parse(this.response)
output.push(data);
if (request.status >= 200 && request.status < 400) {
console.log(output[0].brand);
} else {
console.log('error');
}
}
request.send()
const item_box = (
<ItemPanel>
<ItemBox>
<BoxTitle>{output[0].brand}</BoxTitle>
</ItemBox>
<BoxImg src={require("./ucfnti1.jpg")} alt='img error'></BoxImg>
);
问题是 (output[0].brand) 元素呈现为空,而
console.log(output[0].brand);
在控制台中打印正确的值:/
解决方案
您需要将此变量添加到状态并在从服务器获得响应时更新它
在您的组件中,您需要:1)使用“输出”设置状态
this.state = {
output: []
}
2) 收到响应时更新状态
request.open('GET', 'http://localhost:3005/products/157963', true)
request.onload = function() {
let data = JSON.parse(this.response)
this.setState(prevState => ({output: [...prevState.output, data]}))
3)从您的状态呈现一个值
<ItemPanel>
<ItemBox>
<BoxTitle>{this.state.output[0].brand}</BoxTitle>
</ItemBox>
<BoxImg src={require("./ucfnti1.jpg")} alt='img error'></BoxImg>
推荐阅读
- javascript - 在按钮下
- iis - Identity Server 3 - 未读取令牌端点的发布数据
- javascript - 使用正则表达式拆分没有返回正确的响应
- python - 将字符串列表转换为整数
- java - ffmpeg 不使用文件名有空格
- python - 当我按列表的不同属性排序时,如何判断列表顺序是否发生了变化?
- python - 测试 OpenAI 的 Spinup 错误,没有名为 'joblib' 的模块
- wordpress - 如何在 Wordpress 中自定义帖子的格式显示
- ios - Swift - AVPlayer 加载失败并出现错误错误域 = NSURLErrorDomain 代码 = -999 “已取消”
- python-3.x - sys.stdin.read() 返回空字符串