reactjs - 在本机反应中将 url 参数注入 API 调用
问题描述
我将一些参数从一个页面传递到另一个页面以进行 API 调用。我注意到的是,当我对我想进入 http 调用的值进行硬编码时,我得到了想要的结果,但是当我将参数中的值注入到调用中时,如果无法正常工作。所以我认为参数无法通过,直到我在渲染函数中发出警报,我意识到警报提示两次,第一个是空的,第二个提示带来上一页的值,所以意思在我的 componentDidMount 中,调用
state = {
modalVisible: false,
posts : [],
itemID: ''
}
componentDidMount = () => {
const { navigation } = this.props;
this.setState({itemID : navigation.getParam('itemID')})
api.get('/items/'+`${this.state.itemID}`+'/test_items_details/'+`${userID}`+'/posts').then((response) => {
let data = response.data.data
this.setState({posts: data})
console.log(JSON.stringify(this.state.posts))
})
}
解决方案
根据文档,它指出
setState() 并不总是立即更新组件。它可能会批量更新或将更新推迟到以后。这使得在调用 setState() 之后立即读取 this.state 是一个潜在的陷阱。相反,使用 componentDidUpdate 或 setState 回调 (setState(updater, callback)),它们都保证在应用更新后触发。如果您需要根据之前的状态设置状态,请阅读下面的 updater 参数。
您的代码片段试图在状态变量实际上已更新之前访问它。
你可以在这里做两件事:
- 只需使用
navigation.getParam('itemID')
,现在您的 URL 变为/items/${navigation.getParam('itemID')}/test_item_details/${userID}/posts
. - 使用
setState
回调,代码片段添加在下面。
片段:
this.setState({ itemID: navigation.getParam('itemID') }, () => {
// this.state.itemID is now set, you can make your API call.
});
如果您使用 this.state.itemID 的唯一意图是用于 URL,我会选择第一个选项。
推荐阅读
- c# - 无法从类型转换
到 IType - django - Django Inlineformsets - 使用 django-extra-views 进行自定义验证
- git - 通过 REST API 从另一个帐户将 Repo 导入 Azure DevOps 帐户会引发 BAD 请求
- macos - `gem install xcpretty` 是否返回错误
- mysql - mysql STR_TO_DATE 函数
- r - 我们可以使用 JDBC 将数据从 postgresql 写入 Spark 吗?
- python - 通过可点击的桌面图标运行 python 程序
- javascript - 为什么我不能将 AdjecentHTML 插入文本区域?
- javascript - 如何在JS中以隐藏模式运行exe?
- python-3.x - 单元测试中的 AssertionError