reactjs - 调用父设置状态时网站重新加载
问题描述
我创建了一个子组件,并希望在单击子项中的按钮时通过子项中的文本框的参数来更改父项状态。我将函数传递给子组件。点击按钮后,状态改变,html内容改变,但之后网站重新加载,状态恢复到初始值。
这是主要课程
class Main extends React.Component {
constructor() {
super();
this.state = {
samples: 5
};
}
setSamplesHandler(value) {
this.setState({samples: value})
}
render() {
return (
<div>
<ControlBoard status={status} setSamplesHandler={this.setSamplesHandler.bind(this)}/>
</div>
);
}
}
export default Main;
这是儿童班
class ControlBoard extends React.Component {
constructor(){
super();
this.state = {
tempSamples: 0
};
}
changeTextBox(){
this.setState({tempSamples: event.target.value})
}
onClickSet() {
this.props.setSamplesHandler(this.state.tempSamples);
}
render() {
return(
<div>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder={this.props.status.samples} aria-label="set" onChange={this.changeTextBox.bind(this)}/>
<button class="btn btn-outline-success my-2 my-sm-0" onClick={this.onClickSet.bind(this)}>Set</button>
</form>
</div>
);
}
}
export default ControlBoard;
请帮我 !!
解决方案
该按钮位于表单内,因此默认浏览器行为是在单击时重新加载浏览器。
preventDefault
您可以通过在事件上调用方法来防止这种情况。
onClickSet(event) {
event.preventDefault();
this.props.setSamplesHandler(this.state.tempSamples);
}
推荐阅读
- node.js - Azure AD 使用 Passport.js 对访问令牌进行无效签名
- css - 如何使用 ::ng-deep 访问 Angular 子组件的 CSS
- c++ - 在线程之间协调哪些线程是空闲的最有效的方法是什么?
- javascript - 制作一个字典数组,字典的值也是一个数组
- java - Camunda bpm - 如何添加多个管理员用户?
- c# - Code-First 数据库和 PostgreSql 的问题
- python - 如何从异步信号处理程序中捕获自定义异常?
- java - Java nativeQuery:带有 AliasToEntityMapResultTransformer 的 ResultSet 在地图中具有无序列
- python - Colour according to custom values in Matplotlib
- python - 将列表中的每第四个项目保存到python字典中的一个键