javascript - 更新在渲染方法中调用的函数的状态值
问题描述
我正在渲染一个函数,该函数在我的反应应用程序中返回一个组件,如下所示
render(){
return(
<div>
{this.renderView()}
<div>
)
}
我的渲染视图如下
renderView() {
return(
<HelloPage
pages={this.state.pageCount}
showEndPage={true}
renderResultStats={
function (stats) {
if (stats.numberOfPages < 5) {
this.setState({
pageCount: stats.numberOfPages
})
} else {
this.setState({
pageCount: 5
})
}
}.bind(this)
}
/>
)
}
我可以使代码正常工作,但出现控制台错误:
在现有状态转换期间无法更新(例如在 内
render
)。渲染方法应该是 props 和 state 的纯函数。
我会使用变量而不是,setState
但我无法将更新的pageCount
值传递给pages
属性,因为它只返回默认值。为了克服这个问题,我使用了setState
.
解决方案
您不能直接在渲染函数中更新状态
选项1
componentDidMount(){
this.setState(state=>({pageNo:5}))
}
选项 2
render(){
return(
<HelloPage
pages={this.state.pageCount}
showEndPage={true}
renderResultStats={()=>{this.setState(state=>({pageNo:5}))}}
/>
);
}
此函数不会自动调用。您可以使用任何事件方法,例如onClick
推荐阅读
- php - 将图像保存在数据库中并在视图 laravel 5.6 中显示
- javascript - 在 textarea 中输入的 HTML 代码未保存在数据库中
- javascript - 你可以在mixpanel中有子属性吗?
- macos - macOS WindowServer 和 CoreGraphics API 使用
- google-apps-script - Google Script for Sheets:设置多个过滤器
- c# - Devexpress ActiveBandedGridView 选定的行?
- ios - 使用手势从 TableView 转到另一个 Tableview
- php - 从 laravel 中的集合中获取所有对象
- php - 返回页面时无法识别 Cookie
- javascript - 扩展浏览器原生类时使用 Webpack