if-else 不能在 scss 中使用 react
if-else is not working in scss with react
我正在使用样式文件 .scss 处理这个 React 项目。我想实现这个切换和导航栏,如果我单击它应该更改为打开,反之亦然,但我不知道问题是反应还是 if-else 条件。
这是我的反应代码:
import React, { useState } from 'react';
const Burger = () => {
const [open, setOpen] = useState(false)
return (
<>
<div className={styles['burger']} open={open} onClick={() => setOpen(!open)}>
<div />
<div />
<div />
</div>
<RightNav open={open} />
</>
)
}
这是我的 .scss 代码:
&:nth-child(1) {
$type: open;
@if $type == open {
transform: rotate(45deg);
} @else{
transform: rotate(0);
}
}
&:nth-child(2) {
$type: open;
@if $type == open {
transform: translateX(100%);
opacity: 0;
} @else{
transform: translateX(0);
opacity: 1;
}
}
&:nth-child(3) {
$type: open;
@if $type == open {
transform: rotate(-45deg);
} @else{
transform: rotate(0);
}
}
我的代码有什么作用?它运行并且导航栏保持打开状态,此代码用于制作汉堡包按钮和十字按钮。所以,这只是停留在一个十字按钮中,点击导航栏保持打开状态。
你不能在 scss 文件中使用反应状态。
一个解决方案是当组件状态 open
为真时,将另一个 class is-open
添加到带有 burger
class 的 div .
<div className={`burger ${open ? 'is-open': '' }`} onClick={() => setOpen(!open)}>
并在 is-open
class 添加到 div 和 burger
class 时为子元素添加样式。
.burger {
div {
&:nth-child(1) {
transform: rotate(0);
}
&:nth-child(2) {
transform: translateX(0);
opacity: 1;
}
&:nth-child(3) {
transform: rotate(0);
}
}
&.is-open {
div {
&:nth-child(1) {
transform: rotate(45deg);
}
&:nth-child(2) {
transform: translateX(100%);
opacity: 0;
}
&:nth-child(3) {
transform: rotate(-45deg);
}
}
}
}
我正在使用样式文件 .scss 处理这个 React 项目。我想实现这个切换和导航栏,如果我单击它应该更改为打开,反之亦然,但我不知道问题是反应还是 if-else 条件。
这是我的反应代码:
import React, { useState } from 'react';
const Burger = () => {
const [open, setOpen] = useState(false)
return (
<>
<div className={styles['burger']} open={open} onClick={() => setOpen(!open)}>
<div />
<div />
<div />
</div>
<RightNav open={open} />
</>
)
}
这是我的 .scss 代码:
&:nth-child(1) {
$type: open;
@if $type == open {
transform: rotate(45deg);
} @else{
transform: rotate(0);
}
}
&:nth-child(2) {
$type: open;
@if $type == open {
transform: translateX(100%);
opacity: 0;
} @else{
transform: translateX(0);
opacity: 1;
}
}
&:nth-child(3) {
$type: open;
@if $type == open {
transform: rotate(-45deg);
} @else{
transform: rotate(0);
}
}
我的代码有什么作用?它运行并且导航栏保持打开状态,此代码用于制作汉堡包按钮和十字按钮。所以,这只是停留在一个十字按钮中,点击导航栏保持打开状态。
你不能在 scss 文件中使用反应状态。
一个解决方案是当组件状态 open
为真时,将另一个 class is-open
添加到带有 burger
class 的 div .
<div className={`burger ${open ? 'is-open': '' }`} onClick={() => setOpen(!open)}>
并在 is-open
class 添加到 div 和 burger
class 时为子元素添加样式。
.burger {
div {
&:nth-child(1) {
transform: rotate(0);
}
&:nth-child(2) {
transform: translateX(0);
opacity: 1;
}
&:nth-child(3) {
transform: rotate(0);
}
}
&.is-open {
div {
&:nth-child(1) {
transform: rotate(45deg);
}
&:nth-child(2) {
transform: translateX(100%);
opacity: 0;
}
&:nth-child(3) {
transform: rotate(-45deg);
}
}
}
}