reactjs - 在渲染中更改状态参数是否反模式?
问题描述
如果组件中的状态发生更改,我需要制作简单的切换动画。但是我不想每次 react 调用组件渲染时都显示这个动画。我找到了一种方法,但我不喜欢我需要在没有 setState 的情况下直接更改状态变量并在渲染中进行。此外,我不喜欢每次在动画上生成新密钥的想法。我认为它是反模式。如何以不同的方式获得相同的结果?
onClick() {
if(this.props.items.length>=5) {
this.setState({
toggleWarning: true
});
}else {
this.props.onStepAdd();
}
}
render() {
let toggle = "";
let toggleKey = null;
if(this.state.toggleWarning) {
toggle = " "+style.toggleMsg;
toggleKey = {key:Math.random()};
this.state.toggleWarning = false;
}
return (
<div>
<h1>Add New</h1>
<div>
<Button
onClick={this.onClick}
label="Add Step"
/>
</div>
<div
className={style.noteMsg + toggle}
{...toggleKey} >
<h3>Note: You can create only up to 5 steps for form wizard</h3>
</div>
</div>
);
}
解决方案
不确定我是否理解目标,但是如果您想在单击后添加一个类,然后在一段时间后删除该类:
previousTimeout = undefined
onClick = () => {
if(this.props.items.length>=5) {
this.setState({toggleWarning: true});
clearTimeout(this.previousTimeout);
this.previousTimeout = setTimeout(() => {
this.setState({toggleWarning: false})
}, 500);
}
render() {
...className={style.noteMsg + this.state.toggleWarning ? ' '+style.toggleMsg : ''}
}
推荐阅读
- office-js - 在 MS Teams 中编辑文档时不显示 Word 加载项
- python - 如何使用 ChemDraw/Python 从 InChI 创建 .cdx 文件?
- python - 如何修复“TypeError” - 'dict_keys' 对象不可下标?
- google-sheets - 如何使用查询条件从多个工作表中编译数据
- typescript - 使用 dhtmlx 表单和 struts 2 上传文件
- python - Django 404:“找不到与查询匹配的对象实例”
- c# - 如何在 .Net Core 3 Worker 服务中设置应用程序设置
- javascript - 如何将读取为二进制字符串的文件转换为 Uint8Array,其值与使用 ArrayBuffer 时的值不同?
- javascript - 谷歌地图中的新错误
- swift - ios13 tls证书问题-连接错误