javascript - 在后台点击组件外部后关闭弹出组件并将状态设置为False
问题描述
这是我的Search.js
组件。
class Search extends Component {
state = {
doctors: [],
showTab: false
}
openTab = () => {
this.setState({showTab: true});
console.log('openTab state', this.state);
}
render() {
let advancedSearch = null;
if (this.state.showTab===true) {
advancedSearch = (<AdvancedSearch />)
}
return (
<div class="row">
<div class="col-md-2">
<div class="form-group">
<button class="btn btn-md btn-primary" data-toggle="modal" data-target="#myModal" onClick={this.openTab}>Advanced Search</button>
</div>
</div>
{advancedSearch}
</div>
)
}
}
这是我的高级搜索组件。无需深入查看代码。
const advancedSearch = (props) => {
return (
<div class="modal inmodal" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content animated bounceInRight">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title"> Advanced Search <i class="fa fa-search"></i> </h4>
</div>
<div class="modal-body">
<div class="row">
{searchFieldsInner.map((field, idx) => (
<SearchField
key={idx}
colWidth={field.colWidth}
placeholder={field.placeholder}
formControl={field.formControl} />
))}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Search</button>
</div>
</div>
</div>
</div>
)
基本上,当我单击 时advancedSearch
,我希望状态变为true
,我正在对if
语句执行此操作。但是,一旦组件打开(基本上是一个向下滑动的弹出视图),并且当我单击弹出窗口关闭后的背景时,我想将showTab
状态变为false
. 关于如何做的任何建议?
解决方案
无论如何都应该打开高级搜索,因为它需要被点击。您应该控制的是高级搜索中的内容。AdvanceSearch
因此, state 应该作为 props传入。
//Search.js
closeTab = () => {
this.setState({showTab: false});
console.log('closeTab state', this.state.showTab);
}
render() {
return (
<div class="row">
<div class="col-md-2" onClick={this.closeTab}>
//skipped code
</div>
<AdvancedSearch isOpen={this.state.showTab} onClick={this.openTab}/>
</div>
)
}
//advanceSearch.js
const advancedSearch = ({isOpen, open}) => {
return (
{isOpen && (
<div class="modal inmodal" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
//skipped code
</div>
</div>
</div>
)}
)
推荐阅读
- node.js - TruffleHDWalletProvider 替代方案,适用于 Websockets
- c# - 带有 401 状态的 API 返回登录页面
- excel - 比较 Excel 电子表格中两个工作表之间的多个列并识别差异
- c++ - c++中的函数错误
- razor-pages - 如何重定向到 ASP.NET Ideneity 登录页面?
- javascript - d3.js voronoi 事件。当光标正好在点上方时,鼠标悬停似乎消失了
- node.js - 无法加载 js 文件 - ChartJS/ChartJS-Node
- oracle - Oracle Select语句的With子句中如何定义函数和子查询?
- android - 深度嵌套对象的领域查询对象
- c# - 如何使用按钮索引为特定单击的按钮着色?