React JS状态不会在点击时更新
React JS state doesn't update on click
我的showroom组件如下:
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
中的第二个参数应该是function
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
相关文章:
- 有条件更新d3.js力图中节点的最佳方法
- d3.js用按钮更新条形图工具提示
- React js更改状态不会更新组件
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记
- 如何让React JS点击处理程序在执行时更新DOM
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- JS在更新面板后重置
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- 使用PHP更新external.js中的Javascript变量
- Angular JS-文本框未在独立范围内更新
- 在第三次onPageClick事件后,使用twbspagination插件和AJAX更新JS分页
- 基于元素ID更新JS对象
- 持续更新 JS 变量的 HTML 显示
- 更新JS类的属性基于其他属性
- 在angular $scope中更新JS数组
- Jquery .html()似乎没有更新JS代码
- React Native,自动更新.js文件
- 如何通过ajax更新js对象类型变量
- 如何让grunt用户更新JS来引用我们的图像
- 基于本地存储更新JS对象