javascript - ReactJS 为什么我的 DOM / `display` 只渲染 'display: none'?
问题描述
让我有点发疯......我想单击一个Preview
按钮,它会生成一个预览窗格用于文本输入。我想我会让 div 的内联样式链接到 React 状态。
<div className="preview-container" style={{ display: this.state.showPreview ? 'visible' : 'none' }}>
{
this.state.showPreview &&
<Preview
htmlString={value.toString('html')}
showOrHidePreview={this.togglePreview}
/>
}
</div>
但是,即使我在单击按钮时可以看到状态发生变化, 并且我已经通过将边框颜色链接到状态来成功地更改了边框颜色 - 出于某种原因,将显示更改为无只是坚持。它不会离开它。
有任何想法吗?
更新(相当标准的切换处理程序):-
togglePreview = () => {
if (this.state.showPreview === false) {
this.setState({
showPreview: true,
})
} else {
this.setState({
showPreview: false,
})
}
}
感谢 v.much @AdrianoRepetti 的建议,display: block
而不是visible
. 不知道我从哪里接display: visible
的。
如果其他人发生这种情况,我还发现了一个使用 opacity: 10 vs opacity 0 的 hack。虽然这有点刮擦桶。
解决方案
这段代码有几个问题:
1.
display: visible
不正确,不会有任何效果(被浏览器忽略)。这里的正确值是display: block
。
2.
您正在删除内容时showPreview
is false
,所以display: none
也没有效果。
3.
当 showPreview 是false
您要求 React 呈现值时false
。这是错误的,你会得到错误。
4.
的最大值opacity
为1
。
5.(可能)
showPreview 的初始值是多少?如果undefined
,您的切换会将 showPreview 设置为false
,给您的印象是它根本没有做任何事情。
推荐阅读
- r - R:解释 boot() 输出
- angular - 如何将 JSON 请求正文的值设置为数组而不是字符串
- wordpress - 使用过滤器更改默认页面标题 wordpress
- powershell - 是否可以使用 CmdLet 在 C# 中编写 PowerShell 提示函数?
- python - 如何在views.py中返回两个字典
- java - 如何使用 Java 代码用特定模式替换字符串中的未知子字符串?
- html - 为什么我的照片没有显示完整的自我?
- javascript - 如何将 signalR 聊天消息保存到数据库
- javascript - 剑道网格将最小值和最大值设置到另一列
- c# - 如何确定是否可以使用 CancellationTokenSource 取消某个异步任务?