第十四篇 描述UI-JSX中使用花括号包含JavaScript代

2023-02-07  本文已影响0人  深圳都这么冷

JSX中使用花括号包含JavaScript代码

JSX 允许您在 JavaScript 文件中编写类似 HTML 的标记,将呈现逻辑和内容保持在同一位置。 有时您会希望在该标记内添加一些 JavaScript 逻辑或引用动态属性。 在这种情况下,您可以在 JSX 中使用大括号为 JavaScript 打开一个窗口。

你将学习

  • 如何传递带引号的字符串
  • 如何使用大括号在 JSX 中引用 JavaScript 变量
  • 如何使用大括号在 JSX 中调用 JavaScript 函数
  • 如何在带有花括号的 JSX 中使用 JavaScript 对象

传递带引号的字符串

当你想将一个字符串属性传递给 JSX 时,你可以将它放在单引号或双引号中:

export default function Avatar() {
  return (
    <img
      className="avatar"
      src="https://i.imgur.com/7vQD0fPs.jpg"
      alt="Gregorio Y. Zara"
    />
  );
}

在这里,“https://i.imgur.com/7vQD0fPs.jpg”和“Gregorio Y. Zara”作为字符串传递。

但是,如果您想动态指定 src 或 alt 文本怎么办? 您可以通过将“和”替换为 { 和 } 来使用来自 JavaScript 的值:

export default function Avatar() {
  const avatar = 'https://i.imgur.com/7vQD0fPs.jpg';
  const description = 'Gregorio Y. Zara';
  return (
    <img
      className="avatar"
      src={avatar}
      alt={description}
    />
  );
}

请注意 className="avatar" 和 src={avatar} 之间的区别,前者指定使图像变圆的“avatar”CSS 类名,后者读取名为 avatar 的 JavaScript 变量的值。 那是因为花括号让您可以在标记中直接使用 JavaScript!

使用花括号:进入 JavaScript 世界的窗口

JSX 是一种特殊的 JavaScript 编写方式。 这意味着可以在其中使用 JavaScript——使用花括号 {}。 下面的例子首先为科学家声明了一个名字,name,然后用大括号将它嵌入到 <h1> 中:

export default function TodoList() {
  const name = 'Gregorio Y. Zara';
  return (
    <h1>{name}'s To Do List</h1>
  );
}

尝试将名称的值从“Gregorio Y. Zara”更改为“Hedy Lamarr”。 查看待办事项列表标题如何变化?

任何 JavaScript 表达式都可以在大括号之间工作,包括像 formatDate() 这样的函数调用:

const today = new Date();

function formatDate(date) {
  return new Intl.DateTimeFormat(
    'en-US',
    { weekday: 'long' }
  ).format(date);
}

export default function TodoList() {
  return (
    <h1>To Do List for {formatDate(today)}</h1>
  );
}

在哪里使用花括号

你只能在 JSX 中以两种方式使用大括号:

使用“双重花括号”:CSS 和 JSX 中的其他对象

除了字符串、数字和其他 JavaScript 表达式之外,您甚至可以在 JSX 中传递对象。 对象也用大括号表示,例如 { name: "Hedy Lamarr", inventions: 5 }。 因此,要在 JSX 中传递一个 JS 对象,必须将对象包裹在另一对花括号中:person={{ name: "Hedy Lamarr", inventions: 5 }}。

您可能会在 JSX 中的内联 CSS 样式中看到这一点。 React 不要求您使用内联样式(CSS 类在大多数情况下工作得很好)。 但是当你需要一个内联样式时,你将一个对象传递给 style 属性:

export default function TodoList() {
  return (
    <ul style={{
      backgroundColor: 'black',
      color: 'pink'
    }}>
      <li>Improve the videophone</li>
      <li>Prepare aeronautics lectures</li>
      <li>Work on the alcohol-fuelled engine</li>
    </ul>
  );
}

尝试更改 backgroundColor 和颜色的值。

当你这样写时,你真的可以看到大括号内的 JavaScript 对象:

<ul style={
  {
    backgroundColor: 'black',
    color: 'pink'
  }
}>

下次你在 JSX 中看到 {{ 和 }} 时,要知道它只不过是 JSX 卷曲内的一个对象!

"陷阱

内联样式属性以驼峰式命名。 例如,HTML <ul style="background-color: black"> 在您的组件中将写为 <ul style={{ backgroundColor: 'black' }}>。

使用 JavaScript 对象和花括号的更多乐趣

您可以将多个表达式移动到一个对象中,并在您的 JSX 大括号内引用它们:

const person = {
  name: 'Gregorio Y. Zara',
  theme: {
    backgroundColor: 'black',
    color: 'pink'
  }
};

export default function TodoList() {
  return (
    <div style={person.theme}>
      <h1>{person.name}'s Todos</h1>
      <img
        className="avatar"
        src="https://i.imgur.com/7vQD0fPs.jpg"
        alt="Gregorio Y. Zara"
      />
      <ul>
        <li>Improve the videophone</li>
        <li>Prepare aeronautics lectures</li>
        <li>Work on the alcohol-fuelled engine</li>
      </ul>
    </div>
  );
}

在此示例中,person JavaScript 对象包含一个name字符串和一个theme对象:

const person = {
  name: 'Gregorio Y. Zara',
  theme: {
    backgroundColor: 'black',
    color: 'pink'
  }
};

组件可以像这样使用来自 person 的这些值:

<div style={person.theme}>
  <h1>{person.name}'s Todos</h1>

JSX 作为一种模板语言非常精简,因为它允许您使用 JavaScript 组织数据和逻辑。

回顾

现在你几乎了解了 JSX 的一切:

上一篇下一篇

猜你喜欢

热点阅读