reactjs 如何在元素className中执行三元操作

7kqas0il  于 2023-03-17  发布在  React
关注(0)|答案(1)|浏览(144)

我正在使用React和Next.js创建一个网站。在我的网站中,我有一个名为section.tsx的组件,它使用给定的props呈现文章的一个子部分。我希望该组件接受一个“align”属性。我希望在div元素的className中执行一个三元运算符,检查align属性是否等于“right”。如果为真,它应该设置一个tailwind css类结束。并且如果它为假,则它应该将其设置为开始。
下面是我的代码:

function Section({ idVal, text, title, align }) {
  return (
    <div
      id={idVal}
      className={`mt-12 w-full h-fit text-` + {align} + `grid place-items-` + {align == `right` ? `end` : `start`}}
    >
      <div className="text-4xl text-white text-end mt-20 mr-[15vw] border-b-[1px] border-b-slate-500 w-96 pl-5 rotate-2">
        <h2 className="mr-[4vw] -rotate-2">{title}</h2>
      </div>
      <p className="text-white w-[38vw] mr-[28vw] mt-8 whitespace-pre-line">
        {text}
      </p>
    </div>
  );
}

export default Section;

但是,上面的代码会引发以下错误:, expected(在==上)、Identifier expectedExpression expected

jv4diomz

jv4diomz1#

你已经很接近了。把你的{}换成()来计算一个表达式。
在JSX中,{}让您能够跳到JavaScript中对表达式求值,一旦进入{},就像编写普通的JavaScript一样:

// Change
className={`mt-12 w-full h-fit text-` + {align} + `grid place-items-` + {align == `right` ? `end` : `start`}}

// To
className={`mt-12 w-full h-fit text-` + {align} + `grid place-items-` + (align == `right` ? `end` : `start`)}

请注意,确定您打算对{align}执行什么操作,因为它创建了一个对象,然后在连接该对象时将其转换为字符串。
我会这么写:

const alignClass = align === "right" ? "end" : "start";

className={`mt-12 w-full h-fit text-${alignClass} grid place-items-${alignClass}`}

相关问题