javascript - 如何在父组件重新加载时阻止子组件重新渲染
问题描述
我有以下带有倒计时 npm 库的代码
import React, { Component } from 'react'
import { Panel, Button } from 'rsuite';
import Countdown from 'react-countdown-now';
export default class GamePlay extends Component {
constructor(){
super();
this.state={
select: false
}
this.onSelect = this.onSelect.bind(this);
}
onSelect(e){
this.setState({ select: e.target.name });
}
render() {
return (
<div>
<div className="col-6 offset-3">
<Panel className="text-center bg-white" header={<h3>Question</h3>} bordered>
<div className="d-flex align-items-center">
Time left:
<Countdown date={Date.now() + 30000} />
</div>
</Panel>
</div>
<div className="mt-5">
<div className="d-flex align-items-center">
<div className="col-6">
<Button name="A" appearance={`${this.state.select === 'A' ? 'primary': 'default'}`} block onClick={this.onSelect} bordered>A</Button>
<Button name="C" appearance={`${this.state.select === 'C' ? 'primary' : 'default'}`} block onClick={this.onSelect} bordered>C</Button>
</div>
<div className="col-6">
<Button name="B" appearance={`${this.state.select === 'B' ? 'primary' : 'default'}`} block onClick={this.onSelect} bordered>B</Button>
<Button name="D" appearance={`${this.state.select === 'D' ? 'primary' : 'default'}`} block onClick={this.onSelect} bordered>D</Button>
</div>
</div>
</div>
</div>
)
}
}
当我单击一个按钮以选择一个答案时,它会导致 GamePlay 组件重新呈现,因此倒计时会重新开始。
单击答案时如何阻止它重新启动?我真的很感激任何帮助。
解决方案
您可以date
在渲染函数之外定义属性值,以便在重新渲染父级时它不会改变。
这是一个例子:
constructor(){
....
this.date = Date.now() + 30000;
}
render(){
....
<Countdown date={this.date} />
....
}
推荐阅读
- xamarin.android - 在滑动选项卡布局片段上添加按钮 android xamarin
- elasticsearch - 弹性搜索匹配短语查询 -> 输出不可预测
- ruby-on-rails - 尝试在 Rails 应用程序中显示数据时为零
- python - ImportError:无法从“django.utils.encoding”导入名称“python_2_unicode_compatible”
- android - Flutter AWS S3 - 存储桶策略问题。文件上传成功然后拒绝访问
- r - 计算重复测量设计的结果比例
- reactjs - 如何在 Namecheap 子域上部署 React App?
- python - 当条件要求输入为特殊字符时,如何在Python中编写IF函数?
- android - 搜索不检索数据
- jquery - 为什么子菜单在悬停的手风琴中消失