gpt4 book ai didi

javascript - React JS 状态不会在点击时更新

转载 作者:行者123 更新时间:2023-12-03 06:08:00 25 4
gpt4 key购买 nike

我的陈列室组件如下:

export default class Showrooms extends React.Component {
constructor(props){
super(props);

this.state = {
blockView: true
};
}

handleChangeView(view){
console.log(view);
this.setState({blockView: view});
}

render(){
const language = this.props.language;
return (
<div className="col-lg-10 col-md-9 col-sm-9 col-xs-12 text-center">
<div className="lists">
<div className="listsTitle">{language.portal.introPageTitle}</div>

<ViewBar handleChangeView={this.handleChangeView.bind(this)}/>

<div className="allLists">
<div className="view">

{this.props.allLists.map( (list, i) => <View key={i} list={list} language={language} blockView={this.state.blockView}/>)}

<div className="clearfix"/>
</div>
</div>
<div className="clearfix"/>

</div>
</div>
);
}
}

我的viewBar组件如下:

export default class ViewBar extends React.Component {
constructor(props){
super(props);
this.state = {
blockView: true
};
}

setBlockView(event){
event.preventDefault();
this.setState({blockView: true}, this.props.handleChangeView(this.state.blockView));
}

setListView(event){
event.preventDefault();
this.setState({blockView: false}, this.props.handleChangeView(this.state.blockView));
}


render(){
let blockViewAddBorder = this.state.blockView ? "activeView" : "";
let listViewAddBorder = !this.state.blockView ? "activeView" : "";
return (
<div className="viewBar">
<Link to="" onClick={this.setListView.bind(this)} className={`listViewIcon ${listViewAddBorder}`}>
<FontAwesome name="list" className="portalFaIcon"/>
</Link>
<Link to="" onClick={this.setBlockView.bind(this)} className={blockViewAddBorder}>
<FontAwesome name="th-large" className="portalFaIcon"/>
</Link>
</div>
)
}
}

在 viewBar 组件中,我有两个 onClick 函数,我在其中更新状态,并从陈列室组件调用函数来更新状态。

根据该状态,我更改显示内容的方式。

但问题是,当第一次调用函数setListView时,状态并没有变为false。当我第二次调用 setListView 时,它将状态设置为 false。

this.props.handleChangeView 函数是一个回调函数,应该在状态更新后调用。

有什么建议吗?

最佳答案

setState 中的第二个参数应该是函数

this.setState({ blockView: true }, () => {
this.props.handleChangeView(this.state.blockView);
})

在您的示例中,您将结果从 handleChangeView 传递给 setState

this.setState({
blockView: true
}, this.props.handleChangeView(this.state.blockView));

handleChangeView 不返回任何内容,这意味着您传递给 setState undefined

this.setState({
blockView: true
}, undefined);

这样你就不会在setState之后调用handleChangeView

关于javascript - React JS 状态不会在点击时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449546/

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