Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【学完毕业】处理数字和日期输入的更好方法,很早就有了

【学完毕业】处理数字和日期输入的更好方法,很早就有了

作者头像
前端修罗场
发布于 2023-10-07 11:56:20
发布于 2023-10-07 11:56:20
14400
代码可运行
举报
文章被收录于专栏:Web 技术Web 技术
运行总次数:0
代码可运行

valueAsNumber

你以前可能写过这样的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function NumberInput() {
  const [number, setNumber] = useState(0)

  return (
    <input
      type="number"
      value={number}
      onChange={(e) => {
        const num = parseFloat(e.target.value)
        setNumber(num)
      }}
    />
  )
}

这很好,但你可能不知道,实际上有一种更好的方法来读取数值。例如,下面这句代码是可以改进的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const num = parseFloat(e.target.value)

早在 IE10 时代,我们就有了更好的方法来获取和设置数值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const num = e.target.valueAsNumber

代码可以改成这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function NumberInput() {
  const [number, setNumber] = useState(0)

  return (
    <input
      type="number"
      value={number}
      onChange={(e) => {
        // ✅
        const num = e.target.valueAsNumber;
        setNumber(num);
      }}
    />
  )
}

不仅可以在 React 中使用,也可以在 DOM 节点中使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const myInput = document.querySelector('input.my-input')
const number = myInput.valueAsNumber

同时,这个值可以被再次赋值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myInput.valueAsNumber = 123.456

但是,valueAsNumber 的类型是 number 类型。因此,这意味着如果没有为输入设置值,将获得的是 NaN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeof NaN // 'number'

这就是 JavaScript 有趣的部分。因此,在将valueAsNumber 赋值给变量之前,一定要检查它是否为 NaN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const number = myInput.valueAsNumber
if (!isNaN(number)) {
 // todos
}

valueAsDate

对于日期输入,也有一个方便的 valueAsDate 属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function DateInput() {
  const [date, setDate] = useState(null)

  return (
    <input
      type="date"
      value={date}
      onChange={(e) => {
        // ✅
        const date = e.target.valueAsDate
        setDate(date)
      }}
    />
  )
}

同样,可以在 dom 中使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const myDateInput = document.querySelector('input.my-date-input')
const date = myDateInput.valueAsDate
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myDateInput.valueAsDate = new Date(0)

庆幸的是,对于 valueAsDate,当输入为空时,我们只得到null

因此,你很容易能够检查该值是否为真:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const date = myDateInput.valueAsDate
if (date) {
 // use the date
}

更多关于这两个属性的详细可以参看 MDN

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redux(一):基本概念
React是一个单向数据流的view层框架,单向数据流、组件化、生命周期是其特点。在React组件关系中,组件状态由自己管理,父子组件通过props传递;兄弟组件那么就需要一个共同的父组件作中转;如果涉及层级比较深的话一层一层传递会非常麻烦。所以大量状态共享是React单独难以解决的问题。
Ashen
2020/06/01
1.3K0
【案例】使用React+redux实现一个Todomvc
❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…
且陶陶
2024/07/25
830
【案例】使用React+redux实现一个Todomvc
ReactHooks学习记录
问题描述:点击志玲按钮的时候 子组件的小白changeXiaobai()也会执行 又重复的渲染了一次
biaoblog.cn 个人博客
2022/08/11
3990
如何重塑思维,轻松学会React
首先,React主要提供两大功能:组件(Components)和状态管理(State Management)。组件是React应用的基本构建块,状态则是用来管理组件数据的方式。通过组合这些组件和管理状态,你可以创建复杂且功能强大的前端应用。
前端达人
2024/06/14
1580
如何重塑思维,轻松学会React
快速上手三大基础 React Hooks
20190313162354.png ? 快速上手三大基础 React Hooks Hooks 出了有段时间了,不知盆友们有在项目中开始使用了吗❓如果还没了解的童鞋,可以瞧瞧这篇文章,对比看下三大基础
JS菌
2019/04/10
1.5K0
Reducer:让代码更灵活&简洁
React 表单场景的开发中,往往需要维护众多 state (如,表单数据),过多的 state 会导致源代码冗长,可读性比较差;且未来增删改字段,需要修改的地方也较多,难以维护。
奋飛
2024/05/25
1090
Reducer:让代码更灵活&简洁
React Memo不是你优化的第一选择
Dan的文章在使用React.memo之前的注意事项[1]中,通过几个例子来描述,有时候我们可以通过「组件组合」的方式来优化组件的多余渲染。文章中提到要么通过将「下放State」,要么将「内容提升」。因为组件组合是React的自然思维模式。正如Dan所指出的,这也将与Server Components非常契合。
前端柒八九
2023/10/23
4740
React Memo不是你优化的第一选择
2021react面试题附答案
组件是 React 应用 UI 的构建块。这些组件将整个 UI 分成小的独立并可重用的部分。每个组件彼此独立,而不会影响 UI 的其余部分。
zz1998
2021/09/29
1.3K0
入门 TypeScript 编写 React
Create React App 是一个官方支持的创建 React 单页应用程序的CLI,它提供了一个零配置的现代构建设置。当你使用 Create React App 来创建一个新的 TypeScript React 工程时,你可以运行:
icepy
2019/06/24
5.3K0
React基础(4)-理清React的工作方式
前言 在接触React之前,我们也许习惯了DOM编程,那它相比于原生JS,JQ编程方式,究竟有什么区别?React的工作方式是什么样子的?所谓的虚拟DOM又指的是什么?以及React的工作方式的优点有
itclanCoder
2019/09/17
2.1K0
React基础(4)-理清React的工作方式
React-hooks+TypeScript最佳实战
如果新的 state 需要通过使用先前的 state 计算得出,那么可以将回调函数当做参数传递给 setState。该回调函数将接收先前的 state,并返回一个更新后的值。
xiaofeng123aa
2022/10/17
6.2K0
react hook 那些事儿
首先,它是在react16.8版本中引入的概念,也就说如果你的react版本低于16.8,你是不能使用的,因此在使用它的时候,一定要注意react的版本。
程序那些事儿
2023/03/07
5140
react hook 那些事儿
图形编辑器开发:实现自定义规则输入框组件
‍图形编辑器中,虽然编辑器内核本身很重要,但相当大的一部分工作是 UI 层的交互实现。
前端西瓜哥
2023/09/20
2630
图形编辑器开发:实现自定义规则输入框组件
「react进阶」年终送给react开发者的八条优化建议
笔者是一个 react 重度爱好者,在工作之余,也看了不少的 react 文章, 写了很多 react 项目 ,接下来笔者讨论一下 React 性能优化的主要方向和一些工作中的小技巧。送人玫瑰,手留余香,阅读的朋友可以给笔者点赞,关注一波 。陆续更新前端文章。
用户6835371
2021/06/01
1.8K0
「react进阶」年终送给react开发者的八条优化建议
适合Vue用户的React教程,你值得拥有
小编日常工作中使用的是Vue,对于React只是做过简单的了解,并没有做过深入学习。趁着这个双节假期,小编决定好好学一学React,今天这篇文章就是小编在学习React之后,将React与Vue的用法做的一个对比,通过这个对比,方便使用Vue的小伙伴可以快速将Vue中的写法转换为React的写法。
前端森林
2020/11/03
3.4K0
适合Vue用户的React教程,你值得拥有
那些关于DOM的常见Hook封装(一)
本文是深入浅出 ahooks 源码系列文章的第十四篇,这个系列的目标主要有以下几点:
GopalFeng
2022/08/01
7180
那些关于DOM的常见Hook封装(一)
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
2、利用Redux进行状态管理,这种方式的配套工具比较齐全,可以自定义各种中间件;
张果
2023/03/24
5K0
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
谈谈 React 5种最流行的状态管理库
原文:sourl.cn/F95CrZ,代码仓库地址: https://github.com/dabit3/react-state-5-ways
秋风的笔记
2020/10/27
2.7K0
【Hooks】:[组]Declarative & Imperative
This article strives to make this distinction of declarative vs imperative specifically for people transitioning from vanilla Javascript into React. Additionally, I am writing this during a similar transition so I apologize for any misinformation. But, I am a person who cannot just idly sit by with “React is a declarative writing style.” Therefore, I will attempt to pull apart what makes React declarative and compare it to its imperative counterpart.
WEBJ2EE
2021/02/26
6900
【Hooks】:[组]Declarative & Imperative
Typescript 中,这些类型工具真好用
你是否曾经用 TypeScript 写代码,然后意识到这个包没有导出我需要的类型,例如下面这段代码提示 Content 在 @example 中不存在:
前端修罗场
2023/10/07
2210
Typescript 中,这些类型工具真好用
相关推荐
Redux(一):基本概念
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文