返回
这一周遇到的坑
前端
2024-02-13 11:36:49
一周坑途记
嗨,大家好,我是[你的名字],一位专注于技术博客创作的专家。今天,我将和大家分享这一周以来我在编程征途上踩过的几个坑。
通过分享这些经历,我希望能够帮助其他开发者避免类似的错误,并促进整个社区的成长。
坑 1:position:relative 会提升元素层叠顺序
任务是实现一个单选框位于卡片列表的右边 20px,垂直居中。当时的想法是使用定位,用父元素 position:relative
来提升元素的层叠顺序。
<div class="card-list">
<div class="card">
<input type="radio" name="radio-group" />
</div>
</div>
.card-list {
position: relative;
}
.card {
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
}
然而,这个解决方案存在一个问题。position:relative
除了会提升元素的层叠顺序,还会创建一个新的层叠上下文。这会导致子元素的绝对定位相对于父元素进行,而不是相对于文档流。因此,单选框并没有正确对齐。
坑 2:谨慎使用三元运算符
第二个坑与三元运算符有关。任务是根据一个布尔变量 isClicked
来显示或隐藏一个元素。最初的代码如下:
{isClicked ? <p>显示</p> : <p>隐藏</p>}
然而,这个代码会导致页面闪烁,因为在重新渲染之前,隐藏的元素会短暂地显示出来。为了解决这个问题,可以使用条件渲染:
{isClicked && <p>显示</p>}
坑 3:留意 async/await 的陷阱
最后一个坑是关于 async/await
。任务是创建一个函数,该函数从服务器获取数据并将其存储在状态中。最初的代码如下:
const getData = async () => {
const response = await fetch('/data.json');
const data = await response.json();
setState(data);
};
但是,这个代码有一个问题。如果在调用 getData
函数之前组件卸载,那么 setState
调用将无效,因为组件不再挂载。为了解决这个问题,可以使用 useEffect
钩子:
useEffect(() => {
const getData = async () => {
const response = await fetch('/data.json');
const data = await response.json();
setState(data);
};
getData();
}, []);
通过这些真实的经历,我希望大家能够吸取教训,避免在自己的项目中遇到类似的坑。编程是一个不断学习和成长的过程,通过分享我们的经验,我们可以共同进步,打造更可靠、更高效的软件。