- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 XML 文件中获取 XML 数据,并希望将某些节点值保存在列表中。这就是我尝试这样做的方式:
import React from "react";
class EditFiles extends React.Component {
constructor(props) {
super(props);
this.loadXML = this.loadXML.bind(this);
}
loadXML = () => {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var xmlDoc = this.responseXML;
var y = xmlDoc.getElementsByTagName("newFile");
for(var i=0; i<y.length; i++) {
var NameArray = [y[i].getElementsByTagName("FileName")[0]];
}
const nameList = NameArray.map(name =>
<li>{name}</li>
);
}
};
xhttp.open("GET", "./FilenameList.xml", true);
xhttp.send();
}
render() {
return(
<ul>{nameList}</ul>
);
}
}
首先,我不知道是否可以这样做。我确实找到了类似的问题,但是,答案中的代码解释得不是很好,我不想只是复制和粘贴一些代码而不理解它(另外,即使我想这样做,我也可能做不到,因为我不知道什么代表什么。我在这段代码中遇到的错误是 nameList
未在渲染函数中定义。我知道它必须是一个全局函数,但我不知道该怎么做。
我还看了这篇文章:https://medium.com/@catquarks/making-ajax-requests-with-react-48be0285d396并想像示例中那样做。但是我不是很明白,比如我如何获取某些标签的值?
总之,总结一下我对这个问题的目标:我可以像以前那样使用 XMLHttpRequest 吗?我到底犯了什么错误?
我希望这不是到处都是。如果您需要更多信息/解释,请告诉我。
快速编辑:XML 文件看起来有点像这样:
<Files>
<newFile>
<FileName>file1</FileName>
</newFile>
<newFile>
<FileName>file2</FileName>
</newFile>
</Files>
我还想指出的是,xml 文件是动态创建的,因此无法预测将会有多少个 newFile
节点。
最佳答案
您需要告诉 React 如何以及何时执行 loadXML
函数中的代码。像在构造函数中那样绑定(bind)它在这里是没有用的,因为 bind
只是更改 loadXML
函数的 this
关键字。实际上,React 附带了一组您应该使用的函数,因为 loadXML
的目的是从外部源获取数据。
在您的情况下,componentDidMount
是执行 loadXML
代码指令的正确位置。
最佳做法是:
contructor()
函数中设置您的初始状态
componentDidMount()
函数中用 XMLHttpRequest
做什么更一般地说,React Component Lifecycle是了解显示和更新 React 组件时执行的各种功能的非常有见地的资源。你可能会发现 this example也很有用。
一旦您的数据已加载,然后使用您获得的数据更新组件的 state
。更新 React 组件的 state
(或 props
)会自动触发其 render()
函数并显示您的更改。
然后,在 render()
函数中,只需返回 DOM 元素(或 React 组件)以根据组件的状态变量进行显示。在以下示例中,我们使用 XMLHttpRequest
从 URL 下载 JSON 数据(帖子)并返回每个帖子的 title
。我们告诉 render()
检查 posts
数组的长度,以便知道我们是否有要显示的帖子。
您可以直接运行代码片段,数据是基于 JSON 的(不是 XML),但我相信您可以根据自己的情况进行调整。
class EditFiles extends React.Component {
constructor(props) {
super(props);
this.state = {
posts: []
}
}
componentDidMount() {
var xhttp = new XMLHttpRequest();
var self = this;
xhttp.onreadystatechange = function(e){
console.log(this);
if (xhttp.readyState === 4 && xhttp.status === 200){
console.log("ok, response :", this.response);
self.setState({
posts: JSON.parse(this.response)
});
}
}
xhttp.open("get", "https://jsonplaceholder.typicode.com/posts", true);
xhttp.send();
}
render() {
let postsLoaded = this.state.posts.length > 0;
return(
postsLoaded ?
<ul>
{
this.state.posts.map(
post => {
return <li>{ post.title }</li>;
})
}
</ul>
:
<div>Loading...</div>
);
}
}
ReactDOM.render(
<EditFiles />,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
希望这对您有所帮助!
关于javascript - ReactJS 获取 XMLHttpRequest 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47809550/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!