首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >React技巧之有条件地添加属性

React技巧之有条件地添加属性

作者头像
chuckQu
发布2022-08-19 15:38:50
发布2022-08-19 15:38:50
2.1K0
举报
文章被收录于专栏:前端F2E前端F2E

原文链接:https://bobbyhadz.com/blog/react-conditional-attribute[1]

作者:Borislav Hadzhiev[2]

正文从这开始~

总览

使用三元运算符来为React组件有条件地添加属性。比如说,<button disabled={count > 3 ? true : null}> 。如果问号左边的值是truthy(真值),操作符会返回冒号左边的值,否则会返回右边的值。

代码语言:javascript
复制
import './App.css';
import {useState} from 'react';

export default function App() {
  const [count, setCount] = useState(0);

  const role = 'link';

  let myClass = '';
  if (count >= 0) {
    myClass = 'bg-salmon';
  }

  return (
    <div>
      {/* 👇️ conditionally set attribute value with ternary operator */}
      <button
        disabled={count > 3 ? true : null}
        onClick={() => setCount(current => current + 1)}
      >
        Count: {count}
      </button>

      {/* 👇️ using a variable */}
      <a href="<https://google.com>" role={role}>
        Google.com
      </a>

      {/* 👇️ interpolating a variable */}
      <h2 className={`text-white ${myClass}`}>Some content</h2>
    </div>
  );
}

下面是本文中示例的css。

代码语言:javascript
复制
.bg-salmon {
  background-color: salmon;
}

.text-white {
  color: white;
}

三元运算符

代码片段中的第一个示例使用三元运算符有条件地设置元素的属性。

代码语言:javascript
复制
<button
  disabled={count > 3 ? true : null}
  onClick={() => setCount(current => current + 1)}
>
  Count: {count}
</button>

代码会检查count变量的值是否比3大,如果是,会返回truedisabled属性,否则会返回null

代码逻辑

你还可以在JSX代码之外使用判断逻辑,然后使用一个变量来设置属性。

代码语言:javascript
复制
import './App.css';

export default function App() {
  const role = 'link';

  let myClass = '';
  if ('hi'.length >= 0) {
    myClass = 'bg-salmon';
  }

  return (
    <div>
      {/* 👇️ using a variable */}
      <a href="<https://google.com>" role={role}>
        Google.com
      </a>

      {/* 👇️ interpolating a variable */}
      <h2 className={`text-white ${myClass}`}>Some content</h2>
    </div>
  );
}

当设置myClass变量时,你可以使用任何你需要的代码逻辑,然后当设置属性时使用该逻辑。

每当组件重新渲染时,你的代码逻辑就会重新运行,并更新变量的值。

扩展语法

你也可以创建一个包含属性名和值的对象,然后使用扩展语法(...)来设置元素上的props

代码语言:javascript
复制
import {useState} from 'react';

export default function App() {
  const [count, setCount] = useState(0);

  const attrs = {};

  if ('hi'.length === 2) {
    attrs.role = 'button';
    attrs.onClick = () => {
      setCount(current => current + 1);
    };
  }

  return (
    <div>
      <button {...attrs}>Count: {count}</button>
    </div>
  );
}

我们初始化了一个空对象,然后有条件地在空对象上面设置属性。扩展语法被用来解包对象上的所有键值对,并将它们设置为元素上的props

你可以使用任何代码逻辑和条件语句来构建对象。通常情况下,我们使用三元运算符来为元素添加条件属性。

这里有一个示例,用来有条件地在元素上设置display属性。

代码语言:javascript
复制
import {useState} from 'react';

export default function App() {
  const [isShown, setIsShown] = useState(true);

  const handleClick = event => {
    // 👇️ toggle visibility
    setIsShown(current => !current);
  };

  return (
    <div>
      <button onClick={handleClick}>Toggle visibility</button>

      <div style={{display: isShown ? 'block' : 'none'}}>
        <h2>Some content here</h2>
      </div>
    </div>
  );
}

如果问号左边的值是truthy,操作符会返回冒号左边的值,否则会返回冒号右边的值。

代码语言:javascript
复制
const result1 = 5 === 5 ? 'yes' : 'no';
console.log(result1); // 👉️ "yes"

const result2 = 5 === 10 ? 'yes' : 'no';
console.log(result2); // 👉️ "no"

如果isShown变量的值为truthy值,我们为display属性设置为block,否则设置为none

参考资料

[1]

https://bobbyhadz.com/blog/react-conditional-attribute: https://bobbyhadz.com/blog/react-conditional-attribute

[2]

Borislav Hadzhiev: https://bobbyhadz.com/about

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总览
  • 三元运算符
  • 代码逻辑
  • 扩展语法
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档