javascript - 从另一个组件事件中隐藏组件 - React
问题描述
我有一个绑定组件列表的代码,称为 Call
调用组件:
class Call extends React.Component {
constructor(props) {
super(props);
this.state = {options_show:false};
this.showOptionts = this.showOptionts.bind(this);
}
showOptionts(){
this.setState(prevState => ({
options_show: !prevState.options_show
}));
}
render() {
return (
<div className="call">
<div className="number">Phone: {this.props.number}</div>
<div onClick={this.showOptionts}>MORE</div>
<CallOptions show={this.state.options_show} phone={this.props.number}/>
</div>
);
}
}
调用组件具有将showOptionts()
状态更改
options_show
为真或假的功能。虽然options_show
是真的,但<CallOptions/>
是显示的。
<div onClick={this.showOptionts}>MORE</div>
触发showOptionts()
功能。
CallOptions 组件代码:
class CallOptions extends React.Component {
render() {
const show = this.props.show;
if(show){
return (
<div className="options">
<div>Send WhatsApp</div>
<div>Demo Button</div>
<div>One More Demo Button</div>
</div>
);
}
else return null;
}
}
代码工作正常,但我希望特定 CallOptions 组件在用户单击窗口或单击另一个调用组件时隐藏<div onClick={this.showOptionts}>MORE</div>
我该怎么做?
完整代码:
class Call extends React.Component {
constructor(props) {
super(props);
this.state = {options_show:false};
this.showOptionts = this.showOptionts.bind(this);
}
showOptionts(){
this.setState(prevState => ({
options_show: !prevState.options_show
}));
}
render() {
return (
<div className="call">
<div className="number">Phone: {this.props.number}</div>
<div onClick={this.showOptionts}>MORE</div>
<CallOptions show={this.state.options_show} phone={this.props.number}/>
</div>
);
}
}
class CallOptions extends React.Component {
render() {
const show = this.props.show;
if(show){
return (
<div className="options">
<div>Send WhatsApp</div>
<div>Demo Button</div>
<div>One More Demo Button</div>
</div>
);
}
else return null;
}
}
ReactDOM.render(
<div>
<Call number="006-665-65456"/>
<Call number="018-665-22456"/>
<Call number="019-995-61256"/>
</div>,
document.getElementById('root'));
body{ margin:0;padding:0;}
.call {
display: grid;
grid-template-columns: 80% 20%;
margin-bottom: 20vh;
padding:10px;
background-color: rgb(238, 238, 238);
box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.1), 0 4px 8px 0 rgba(255, 255, 255, 1);
height:9.4vh;
}
.call .number {font-size: 20px; margin:0; font-weight: 600;display: block; color: black; text-decoration: none;}
.options {
background-color: rgb(255, 255, 255);
position: relative;
top:-2vh;
left:45%;
width: 130px;
padding:15px;
z-index: 1;
border-radius: 6px;
box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.1), 0 4px 8px 0 rgba(255, 255, 255, 1);
font-size:12px;
}
.options div{
padding: 1vh;
}
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
解决方案
推荐阅读
- css - 是否可以使用 PrimeNg 定义响应式容器?
- javascript - 为什么这段代码不起作用?(倒数)
- amazon-web-services - 带有 Lambda 的 AWS API Gatway(代理) - 引发内部服务器错误
- puppeteer - react-snap skipThirdPartyRequests 设置为 true,但仍调用 Google Maps API
- wordpress - 如何向 wc_add_to_cart_message_html 显示产品重量?
- python - 困惑为什么这不会产生斜率 1 和角度 45 的直线
- flutter - Flutter、Revenuecat这个版本的app没有配置通过google play计费
- flutter - 如何撤消在 Flutter 中使用 Provider 删除 ListView 中的 Dismissable 项目
- python - 我的变量在 if 语句中被调用以测试它是否为真,但是我在赋值之前得到了局部变量“runningverify”的引用?
- postgresql - 通过函数调用的 Postgres 超越索引使用