reactjs - JSX:内联条件属性 [href]

标签 reactjs jsx

我正在 jsx 中寻找 Href 属性的内联条件解决方案。 如果我提供网址,我想输出:-

<a className="navbar-brand" href="/example-url" >Logo</a>

如果没有:-

<a className="navbar-brand">Logo</a>

最佳答案

最简单的解决方案

React 删除值为 undefined 的属性或null .

您没有指定如何有条件地提供 URL,但现在,我假设您有一个 url当您想要包含 href 时设置为字符串的变量 anchor 上的属性,以及 undefined当你想省略它时。

在这种情况下,您可以使用 url对于属性的值,React 只会添加 href当其值不是 undefined 时属性或null :

return (
  <a className="navbar-brand" href={url}>Logo</a>
)

如果您想根据 url 是否存在来排除该属性,这非常有用。是一个字符串或 undefinednull ,但这可能并不总是您想要检查的条件。在这些其他情况下,您可以使用 conditional ternary operator有条件返回 undefinednull无论什么条件都有意义。

例如,如果 url是一个空字符串,前面的代码片段实际上仍然会设置 href属性可能不是您想要/期望的。为了避免这种情况,您可以使用条件三元来返回 undefined如果 URL 不真实:

return (
  <a className="navbar-brand" href={url ? url : undefined}>Logo</a>
)

替代解决方案

如果您发现自己想要根据条件更改多个(或不同)属性,您可以通过将条件三元组与 spread attributes 结合起来更进一步。 .

这个例子有点做作,但我们可以说,除了有条件地包含或排除 href 之外,属性,您还希望根据 URL 是否真实有条件地指定类名。

您可以通过使用带有三元条件的扩展属性来做到这一点:

return (
  <a {...url
    ? { className: "navbar-brand", href: url }
    : { className: "navbar-brand inactive" }
  }>
    Logo
  </a>
)

您还可以在函数开头准备属性以使内容更具可读性:

const attributes = url
  ? { className: "navbar-brand", href: url },
  : { className: "navbar-brand inactive" };

return (
  <a {...attributes}>Logo</a>
)

当然,如果所需元素之间的差异足够大,您可能最好返回完全不同的元素,而不是使用扩展属性。

(如果使用三元条件来确定元素的根,那么您可以删除周围的 {},因为编译器尚未解释 JSX。)

return (
  <div>
    {url
      ? <a className="navbar-brand" href={url}>Logo</a>
      : <a className="navbar-brand inactive">Logo</a>
    }
  </div>
)

最终,您要采用哪种方法取决于您决定如何包含或排除属性、属性有多少(以及如何)不同,以及什么适合您的代码库的风格最好的。

有关更多信息或替代方案,我建议阅读此文章 related question .

关于reactjs - JSX:内联条件属性 [href],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51997751/

相关文章:

javascript - 如何在将组件实例移动到另一个父组件时保留组件的实例?

javascript - 为什么我的 React 函数会迭代两次?

reactjs - 从其他组件访问数据-React Native

javascript - 如何过滤掉 react 表中日期范围之间的日期

javascript - 链接参数不会在 JSX 中呈现( react )

vue.js - Vue JSX 绑定(bind)到类名

javascript - 内联 Babel 脚本 : Unexpected token

javascript - 名称为 ='' 的无效表单控件不可聚焦错误 Material ui 输入类型文件

typescript - 如何向 TypeScript/JSX 中的现有 HTML 元素添加属性?

reactjs - React 调用动态状态名称