我正在尝试获取componentDidMount中的api。api结果将被设置为组件的状态,状态映射并传递给子组件。
如果我在componentDidMount中使用fetch方法获取api,那么一切正常:
componentDidMount(){
fetch(apiToFetch)
.then((result) => result.json())
.then((result) => result.entries)
.then((entries) => this.setState({ ...this.state, entries }))
.catch((error) => console.log(error));
}
如果在方法内使用fetch,然后在componentDidMount内调用此方法,则不会呈现任何内容:
componentDidMount() {
this.fetchApiToEntries(GLOBAL_PORTFOLIO_COLLECTION_API);
}
fetchApiToEntries(apiToFetch) {
fetch(apiToFetch)
.then((result) => result.json())
.then((result) => result.entries)
.then((entries) => this.setState({ ...this.state, entries }))
.catch((error) => console.log(error));
}
我无法理解我在生命周期中缺少了什么。你不应该这样做吗?
以下是我的初始组件:
export default class Portfolio extends React.Component {
constructor(props) {
super(props);
this.state = {
entries: []
}
}
componentDidMount() {
this.fetchApiToEntries(GLOBAL_PORTFOLIO_COLLECTION_API);
}
fetchApiToEntries(apiToFetch) {
fetch(apiToFetch)
.then((result) => result.json())
.then((result) => result.entries)
.then((entries) => {
this.setState({
...this.state,
entries
})
})
.catch((error) => console.log(error));
}
render() {
return (
<Fade bottom>
<div className="Portfolio">
<div className="Portfolio__title"><h4 className="color--gradient text--spacing">WORKS</h4></div>
<OwlCarousel {...options}>
{this.state.entries.map((item) => (
<PortfolioElement item={item} />
))}
</OwlCarousel>
<AnchorLink href='#contact'><Button className="contact-button btn--gradient slider-button Services__button">Let's get in touch</Button></AnchorLink>
</div>
</Fade>
)
}
}
PortfolioElement是未呈现的实际组件。有什么建议吗?谢谢你。
编辑:这两种方法都没有以正确的方式重新呈现组件(…这是我没有预料到的:我不知道为什么,但如果我在componentDidMount中调用它们两次,组件将以正确的方式呈现)。我想我错过了这个州的一些东西。
我在控制台上没有错误,这就是我如何设置我的初始状态:
this.state={entries:[]}
这是控制台中实际条目的外观:
entries:
[0:{credits: "..."
description: "..."
featuredImage: {path: "portfolio/01.jpg"}
firstImage: {path: "portfolio/firstimage.jpg"}
secondImage: []
slug: "..."
tasks: (5) [{…}, {…}, {…}, {…}, {…}]
title: "..."
_by: "5beae6553362340b040001ee"
_created: 1542123322
_id: "5beaef3a3362340bf70000b4"
_mby: "5beae6553362340b040001ee"
_modified: 1542149308
},
1:{...}
]
获取后我的状态与此相同。
更新我发现问题在于:当状态改变时,组件没有用正确的道具重新加载子组件。我在一个更高阶的组件中调用了API,该组件传递了props,并添加了一个componentWillUpdate方法,该方法强制执行状态刷新,从而重新启动该组件。这不是理想的解决方案,但我现在还没有找到其他办法。有什么建议吗?
您需要在构造函数中绑定fetchApiToEntries还是使用fat箭头?
this.fetchApiToEntries = this.fetchApiToEntries.bind(this);
对不起,我不能评论没有足够的代表
Idk您的api响应是什么,但我用一个假的api测试了您的代码,并更改了它
fetchApiToEntries(apiToFetch){}
到箭头函数(箭头函数)
fetchApiToEntries = (apiToFetch) => {}
它工作得很好。
完整示例:
export default class Portfolio extends React.Component {
constructor(props) {
super(props);
this.state = {
entries: []
}
}
componentDidMount() {
this.fetchApiToEntries('https://jsonplaceholder.typicode.com/posts');
}
fetchApiToEntries = (apiToFetch) => {
fetch(apiToFetch)
.then(result => result.json())
.then((entries) => {
this.setState({
...this.state,
entries
})
})
.catch((error) => console.log(error));
}
render() {
const {entries} = this.state;
console.log(entries);
return (
// Everything you want to render.
)
}
}
希望对你有帮助。
我们使用nextjs/reactjs作为FE,并且我们有一个server.js文件,它允许我们在上传映像,但是由于某种原因,每当我们运行服务器时,都会出现错误 下面是我们在server.js上的代码 这些是我们package.json中包含的脚本 希望得到一些答案和建议。这些代码在本地运行,没有任何问题
英文原文: http://emberjs.com/guides/getting-ember/index/ Ember构建 Ember的发布管理团队针对Ember和Ember Data维护了不同的发布方法。 频道 最新的Ember和Ember Data的 Release,Beta 和 Canary 构建可以在这里找到。每一个频道都提供了一个开发版、最小化版和生产版。更多关于不同频道的信息可以查看博客
我一直在尝试使用nativescript创建一个android应用程序。我正在使用fetch模块从服务器获取响应。当我试图从httpbin获得响应时。org/get,没关系。但当我试图从本地服务器获取响应时,网络请求失败。错误 发送到httpbin。组织/获取- 发送到本地主机:8000/api- 当我尝试从纯节点中的localhost:8000/api获取响应时。js通过请求模块。它工作得很好。
获取资讯列表 获取置顶资讯列表 获取资讯详情 获取一条资讯的相关资讯 获取资讯列表 GET /news 传入参数 名称 说明 limit 数据返回条数 默认为20 after 数据翻页标识 key 搜索关键字 cate_id 分类id recommend 推荐筛选 =1为筛选推荐资讯列表 id 需要按照 ID 获取的资讯 ID,多个使用半角 , 进行分割 Response Status: 200
功能介绍 此API为硬件厂商提供通过目睹账号密码直接获取临时token的特殊API,请勿滥用 此API作用为 如果当前账号未生成token,将会生成一个token。 如果当前账号为专业版及以上用户,并且之前调用当前接口获取过临时token,当临时token过期时,再次调用当前接口时,会返回一个token。 专业版本以下用户我们将不再返回token提供使用。 注意: 通过当前接口返回的token长期
我刚到Angular 2还在学习,我正在尝试用get调用击一个URL,但get似乎不通过,即使在浏览器的网络中,我也找不到被调用的get URL。 程序将转到方法控制台,在get调用的上下记录日志,但不记录get调用的日志 我的服务方式
我有一个使用redux的应用程序 我也曾在本地获取数据。 在我的反应组件中,我使用来获取数据。但我什么也没得到。 如何在我的组件中获取数据? 演示:https://codesandbox.io/s/nervous-rosalind-lp16j?file=/src/App.js:242-328
我从服务器得到这样的响应: 但打印fetch API捕获中的err只会返回错误对象。 它打印了这个(来自谷歌浏览器): 我想得到正确的错误处理状态代码,就像服务器没有响应一样。 在这种情况下,有没有办法获取响应数据?否则,我可以尝试什么替代方案? 任何建议都将不胜感激!