gpt4 book ai didi

javascript - react componentDidMount 获取 api

转载 作者:行者123 更新时间:2023-11-29 10:57:59 27 4
gpt4 key购买 nike

我正在尝试获取 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));
}

我不明白生命周期中缺少什么。不应该做出以下 react 吗?

  • 初始化状态
  • 渲染
  • 调用componentDidMount
  • 重新渲染

这是我的初始组件:

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:{...}
]

获取后我的状态是一样的。

更新 我发现问题是:当状态改变时,组件没有使用正确的 Prop 重新渲染 child 。我在传递 props 的高阶组件中调用了 API,并添加了一个 componentWillUpdate 方法来强制重新呈现组件的状态刷新。这不是理想的解决方案,但直到现在我才想出其他方法。有什么建议吗?

最佳答案

我知道你的 api 响应是什么,但我用一个假的 API 测试了你的代码并更改了

fetchApiToEntries(apiToFetch){}

到箭头函数(Arrow Function)

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.
)
}
}

希望对你有帮助。

关于javascript - react componentDidMount 获取 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com