javascript - 反应引导模式上下文
问题描述
我对引导模式有疑问。似乎从它调用的函数与从组件的其他部分调用的函数具有不同的上下文。当我在处理来自选择元素的选择的函数(handleSelect())中检查 this.selectedPhone 的值时,预期值就在那里。当我打开模态并按下调用 confirmChange() 函数的按钮时,函数中的值是我在构造函数中为 this.selectedPhone 设置的初始值。
<tr>
<td>{this.props.todo.name}</td>
<td>{this.props.todo.version}</td>
<td><select ref={(select) => {this.newVersion = select}} onChange={this.handleSelect} className="versionInput">
{this.props.versions.filter(version => version.chain === this.props.todo.chain).map(version =>
<option selected={version.name===this.selectedPhone} value={version.name}>{version.name}</option>
) }
</select></td>
<td >{this.props.todo.chain}</td>
<td >{this.props.todo.store}</td>
<Modal selectedPhone={this.selectedPhone} onHide={this.props.toggleModal} show={this.props.showModal}>
<Modal.Header closeButton>
<Modal.Title>Change: {this.props.todo.name}</Modal.Title>
</Modal.Header>
<Modal.Body>
<p>Change to:</p><label>{this.props.todo.version}</label>
</Modal.Body>
<Modal.Footer>
<button className="btn btn-primary" onClick={this.confirmChange}>Change</button>
<button className="btn btn-danger" onClick={this.toggleModal}>Cancel</button>
</Modal.Footer>
</Modal>
</tr>
以下是绑定到 DOM 的函数:
confirmChange(e){
console.log(this.selectedPhone);//Always outputs the initial value that is set in the constructor of component
}
handleSelect(e){
this.selectedPhone=e.target.value.slice(0);
console.log(this.selectedPhone); //The right value output in console
this.toggleModal();
}
toggleModal(){
this.props.toggleModal();
}
这是构造函数:
constructor(props){
super(props);
this.toggleModal=this.toggleModal.bind(this);
this.onChange=this.onChange.bind(this);
this.handleSelect=this.handleSelect.bind(this);
this.confirmChange=this.confirmChange.bind(this);
this.newValue=this.newValue;
this.selectedPhone=this.props.todo.phone.slice(0);
}
解决方案
最好使用 selectedPhone 状态而不是使用变量。尝试使用以下方式
handleSelect(e){
this.setState({selectedPhone:e.target.value.slice(0)});
console.log(this.state.selectedPhone);
this.toggleModal();
}
confirmChange(e){
console.log(this.state.selectedPhone);
}
推荐阅读
- javascript - 未捕获的类型错误:无法读取 materialize.js 中未定义的属性“顶部”
- c# - 基于条件 jquery 选中未选中的 JsTree Checkbox
- hyperledger-fabric - 如何将超级账本作曲家模型文件中的主键组合为标识符?
- asp.net-mvc - 在 mvc(Razor) 应用程序中渲染 ssrs 报告而不使用 nuget 包
- apache-camel - Apache Camel:使用 Java DSL 为处理器设置“描述”
- c# - 是否有在我的 UWP 应用程序中使用 Google Books API 的解决方法
- html - 屏幕阅读器如何处理由标签(而不是空格)分隔的文本?
- wix - 用于 wix 自定义操作的 Liblog 适配器
- wpf - Wpf使用棱镜动态地将更多视图添加到tabcontrol
- android - 将背压上的底部导航项状态从活动更改为主页片段