Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React技巧之检查复选框是否选中

React技巧之检查复选框是否选中

作者头像
chuckQu
发布于 2022-08-19 07:49:36
发布于 2022-08-19 07:49:36
1.5K00
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

原文链接:https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked[1]

作者:Borislav Hadzhiev[2]

正文从这开始~

总览

在React中,使用event对象上的target.checked 属性,来检查复选框是否选中。比如说,if (event.target.checked) {} 。或者在state变量中存储checked值,或者访问不受控制的复选框的ref.current.checked 属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {useState} from 'react';

export default function App() {
  const [isSubscribed, setIsSubscribed] = useState(false);

  const handleChange = event => {
    if (event.target.checked) {
      console.log('✅ Checkbox is checked');
    } else {
      console.log('⛔️ Checkbox is NOT checked');
    }
    setIsSubscribed(current => !current);
  };

  return (
    <div>
      <label htmlFor="subscribe">
        <input
          type="checkbox"
          value={isSubscribed}
          onChange={handleChange}
          id="subscribe"
          name="subscribe"
        />
        Subscribe
      </label>
    </div>
  );
}

react-check-if-checkbox-checked-controlled.gif

如果对ref使用不受控制的复选框,请向下滚动到下一个代码片段。

event

event对象上的target属性引用input元素,因此我们可以通过event.target.checked来访问checked值。

需要注意的是,我们为setIsSubscribed传递了一个函数,因为该函数被保证以isSubscribed布尔值的当前(最新的)值来调用。

当我们需要基于当前state来计算下个state值时,这是非常有用的。

ref

要检查一个不受控制的复选框是否被选中,可以访问ref对象上的current.checked属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {useRef} from 'react';

export default function App() {
  const ref = useRef(null);

  const handleClick = () => {
    if (ref.current.checked) {
      console.log('✅ Checkbox is checked');
    } else {
      console.log('⛔️ Checkbox is NOT checked');
    }
  };

  return (
    <div>
      <label htmlFor="subscribe">
        <input ref={ref} type="checkbox" id="subscribe" name="subscribe" />
        Subscribe
      </label>

      <br />

      <button onClick={handleClick}>Click</button>
    </div>
  );
}

check-if-checkbox-checked-uncontrolled.gif

useRef()钩子可以传递一个初始值作为参数。该钩子返回一个可变的ref对象,其.current属性被初始化为传递的参数。需要注意的是,我们必须访问ref对象上的current属性,来访问设置了ref属性的复选框元素。

当我们为元素传递ref属性时,比如说,<input ref={myRef} /> ,React将ref对象的.current属性设置为对应的DOM节点。每当点击button按钮时,handleClick函数就会被调用,同时检查复选框是否被选中。

useRef钩子创建了一个普通的JavaScript对象,但在每次渲染时都给你相同的ref对象。换句话说,它几乎是一个带有.current属性的记忆化对象值。

你可以在复选框元素上通过ref.current 访问任意属性。如果你打印ref对象上的current属性,你会发现它只是对input元素的引用。

参考资料

[1]

https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked: https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked

[2]

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React报错之Function components cannot have string refs
当我们在一个函数组件中使用一个字符串作为ref时,会产生"Function components cannot have string refs"错误。为了解决该错误,使用useRef()钩子来得到一个可变的ref对象,这样你就可以在组件中作为ref使用。
chuckQu
2023/02/13
8900
React报错之Function components cannot have string refs
React报错之You provided a `checked` prop to a form field
当我们在多选框上设置了checked 属性,却没有onChange 处理函数时,会产生"You provided a checked prop to a form field without an onChange handler"错误。为了解决该错误,可以使用defaultChecked 属性,或者在表单字段上设置onChange 属性。
chuckQu
2022/09/20
1.7K0
React报错之You provided a `checked` prop to a form field
React技巧之设置data属性
原文链接:https://bobbyhadz.com/blog/react-set-data-attribute[1]
chuckQu
2022/08/19
1.8K0
React技巧之设置data属性
React报错之react component changing uncontrolled input
原文链接:https://bobbyhadz.com/blog/react-component-changing-uncontrolled-input[1]
chuckQu
2022/08/19
3860
React报错之react component changing uncontrolled input
React技巧之打开文件输入框
原文链接:https://bobbyhadz.com/blog/react-open-file-input-on-button-click[1]
chuckQu
2022/08/19
9740
React技巧之打开文件输入框
React技巧之设置input值
原文链接:https://bobbyhadz.com/blog/react-set-input-value-on-button-click[1]
chuckQu
2022/08/19
2.1K0
React技巧之设置input值
React技巧之使用ref获取元素宽度
原文链接:https://bobbyhadz.com/blog/react-get-element-width-ref[1]
chuckQu
2022/08/19
4.2K0
React报错之`value` prop on `input` should not be null
原文链接:https://bobbyhadz.com/blog/react-value-prop-on-input-should-not-be-null[1]
chuckQu
2022/08/19
7250
React报错之`value` prop on `input` should not be null
React入门五:事件处理
步骤: 1.在state中添加一个状态,作为表单元素的value的值(控制表单元素值的由来) 2.给表单元素绑定change事件,将表单元素的值 设置为state的值(控制表单元素值的变化)
用户4793865
2023/01/12
1.9K0
React技巧之useRef钩子
原文链接:https://bobbyhadz.com/blog/react-update-state-when-props-change[1]
chuckQu
2022/08/19
6020
React技巧之useRef钩子
React报错之Cannot assign to 'current' because a read-only property
原文链接:https://bobbyhadz.com/blog/react-cannot-assign-to-current-because-read-only-property[1]
chuckQu
2022/08/19
1.1K0
React报错之Cannot assign to 'current' because a read-only property
React组件基础
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5zo7zriO-1668351209724)(images/组件.png)]
用户10169043
2022/11/18
3.1K0
React组件基础
React报错之Object is possibly null
原文链接:https://bobbyhadz.com/blog/react-useref-object-is-possibly-null[1]
chuckQu
2022/08/19
9220
React报错之Object is possibly null
React技巧之设置onClick监听器
原文链接:https://bobbyhadz.com/blog/react-onclick-link[1]
chuckQu
2022/08/19
7370
React技巧之设置onClick监听器
React技巧之在state数组中添加元素
原文链接:https://bobbyhadz.com/blog/react-push-to-state-array[1]
chuckQu
2022/08/19
2.8K0
React技巧之在state数组中添加元素
React技巧之检查元素是否可见
原文链接:https://bobbyhadz.com/blog/react-check-if-element-in-viewport[1]
chuckQu
2022/08/19
1.1K0
React技巧之重定向表单提交
原文链接:https://bobbyhadz.com/blog/react-redirect-after-form-submit[1]
chuckQu
2022/08/19
1.4K0
React技巧之重定向表单提交
React技巧之表单提交获取input值
原文链接:https://bobbyhadz.com/blog/react-get-form-input-value-on-submit[1]
chuckQu
2022/08/19
1.7K0
React技巧之表单提交获取input值
React技巧之添加或移除类
原文链接:https://bobbyhadz.com/blog/react-add-remove-class-on-click[1]
chuckQu
2022/08/19
9480
React技巧之添加或移除类
React技巧之调用子组件函数
原文链接:https://bobbyhadz.com/blog/react-call-function-in-child-component[1]
chuckQu
2022/08/19
2K0
React技巧之调用子组件函数
相关推荐
React报错之Function components cannot have string refs
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验