- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点迷路了。我想从我的 API 获得响应并将数据发送到子组件。似乎我不明白该怎么做,因为它对我说:“类型错误:无法读取未定义的属性‘setState’”
你能给我解释一下我该怎么做吗?这是我的代码片段:
function GetData(url, params, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url + '?' + params, true);
xhr.onreadystatechange = function(e) {
if (this.readyState === xhr.DONE) {
if (this.status === 200) {
callback(JSON.parse(xhr.responseText));
} else {
console.log('error');
}
}
}
xhr.send(null);
}
class Utilisateurs extends Component {
constructor(props){
super(props);
this.state = {users:''}
GetData('http://localhost:3333/shop/users', 'login=true',
function(res) {
this.setState({users: res});
}
)
}
render() {
return (
<div id="center">
<UserListSorted data={this.state.users}></UserListSorted>
</div>
);
}
}
所以我发出了一个 GET 请求,我想通过响应更改“用户”的状态,这样我就可以打印一个用户列表。但我不知道如何解决这个问题。
感谢您的帮助!
最佳答案
这里发生了几件事。
首先,您不应该在constructor
或componentWillMount()
中发出网络请求。有人可能会称其为反模式。
您不应该从 constructor
执行任何长时间运行的任务,因为这会使组件加载时间更长。这是一个很好的一般规则。只需使用它来设置变量和属性并触发其他类方法,快速设置。我记不清了,但这可能是同步与异步行为的问题。构造函数是一个方法。它是一个函数,因此如果您挂起等待网络请求的线程,组件必须等待才能继续。
componentWillMount()
也是如此。该生命周期方法在组件安装到 DOM 之前启动,这意味着如果您发出网络请求并且它在组件安装之前完成,则无需设置状态。 DOM 中还没有组件需要设置状态。这是以前有人告诉我的,它一直困扰着我。我现在只是告诉你,希望能给你同样的领悟时刻。
您可以从 componentDidMount()
执行此操作,因为组件已准备就绪,但如果您从内部调用 this.setState()
,它将触发另一次重新渲染生命周期方法。有些人将“setState inside componentDidMount”称为反模式,但它并没有那么糟糕。我会说使用它,但要注意它确实会触发重新渲染。渲染方法将至少运行两次。如果你有一个大的、复杂的组件或许多组件,它可能会导致性能问题。这就是为什么人们说“不要这样做”。
展望 future ,我建议创建一个名为 getData()
或其他名称的类方法,然后从 componentDidMount()
中调用它。像这样:
class Something extends Component {
constructor(props) {
super(props)
this.state = {
data: '',
}
}
componentDidMount() {
this.getData()
}
getData() {
// get data from server
const theData = 'we got some data'
this.setState({
data: theData,
})
}
render() {
return <div>{this.state.data}</div>
}
}
我实际上无法完全帮助您处理 XHR 请求,因为我已经很久没有使用它了。我无法验证您的语法是否正确。我建议使用名为 request
的库 https://www.npmjs.com/package/request .我想 XHR 请求可以正常工作,但将请求作为学习练习检查。
关于javascript - react JS : Get data from api and send to child component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48703276/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!