Javascript 正在更新在渲染方法内调用的函数的状态值
我正在呈现一个函数,该函数在我的react应用程序中返回一个组件,如下所示Javascript 正在更新在渲染方法内调用的函数的状态值,javascript,reactjs,setstate,Javascript,Reactjs,Setstate,我正在呈现一个函数,该函数在我的react应用程序中返回一个组件,如下所示 render(){ return( <div> {this.renderView()} <div> ) } renderView() { return( <HelloPage pages={this.state.pageCount} showEndPage={true} renderResult
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(){
返回(
{this.renderView()}
)
}
我的渲染视图如下所示
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)
}
/>
)
}
renderView(){
返回(
)
}
我可以让代码正常工作,但我得到一个控制台错误,如下所示:
无法在现有状态转换期间更新(例如在
渲染
)。渲染方法应该是道具和工具的纯功能
国家
我本应该使用变量而不是
setState
,但我无法将更新后的pageCount
值传递给pages
属性,因为它只返回默认值。为了解决这个问题,我使用了setState
您不能直接在render函数中更新状态
选项1
componentDidMount(){
this.setState(state=>({pageNo:5}))
}
选项2
render(){
return(
<HelloPage
pages={this.state.pageCount}
showEndPage={true}
renderResultStats={()=>{this.setState(state=>({pageNo:5}))}}
/>
);
}
render(){
返回(
{this.setState(state=>({pageNo:5}))}
/>
);
}
此函数不会自动调用。您可以使用任何事件方法,如
onClick
我建议移动内联函数renderResultStats并将其作为类中的一个方法,this.setState inside render方法(或在其内部调用的任何render方法)将始终给出此错误pageCount
是否在HelloPage组件
中使用?你能分享一下HelloPage的代码吗?是的。还有一个类似于HelloPage组件的组件
,并且pageCount
也在其中使用。如何使用componentDidMount来设置您在reder方法中尝试执行的操作?您在哪里调用renderResultStats
?从它的名称来看,它似乎是在HelloPage
的render
函数中调用的。除了使用箭头函数而不是普通函数外,您的代码与OP的代码有什么不同?