reactjs - Reactjs - 调用自定义函数以在用户键入时替换字符
问题描述
我在我的 React 应用程序中输入了一个电话号码。我想将用户键入的非数字字符替换为空格。我编写了以下正则表达式函数来做到这一点:
实用程序.js
/**
* Phone Number - Only allow numbers
*/
export const phoneReplacer = el => {
let elem = new d(el)
let regex = /[^0-9]/i
elem.on('keyup', e => {
let value = e.currentTarget.value
elem.setValue(value.replace(regex, ''))
})
}
如何将其连接到我的输入组件,如下所示:
import React from 'react'
import PropTypes from 'prop-types'
import TextInput from '../others/input/text'
import phoneReplacer from '../../../utils'
const PhoneInput = ({ value, change }) => (
<div className="edit_phone_div">
<TextInput
type="text"
placeholder="Phone Number"
value={value}
valueChange={e => change('phone', e)}
/>
</div>
)
解决方案
解决此问题的最佳方法是使用受控组件。
您可以通过多种方式使用您的正则表达式,但我更喜欢使用它的方式如下:
import React from "react";
import ReactDom from "react-dom";
class TelInput extends React.Component {
state = { value: "" };
telChange = e => {
let text = e.target.value;
text = text.replace(/[\D]+/g, " ");
this.setState({ value: text });
};
render() {
return (
<input
type="tel"
placeholder="Phone Number"
value={this.state.value}
onChange={this.telChange}
/>
);
}
}
const rootElement = document.getElementById("root");
ReactDom.render(<TelInput />, rootElement);
如果您仍然想使用您的实用程序函数,您仍然可以从内部telChange
(在这种情况下)调用它,它可以为您执行逻辑,我text = text.replace(/[\D]+/g, " ");
在这种情况下所做的。这样,您可以将该行替换为:
text = phoneReplacer(text) // From utils.js
你会得到两全其美的。
一般来说,您不想像实用程序函数那样尝试直接操作 DOM,您可以利用 react 本身来构建您正在寻找的功能。
干杯! 吉米
推荐阅读
- mysql - MySQL GROUP BY 子查询中的功能依赖
- css-animations - 使用 css 动画淡出一个图像并淡入另一个图像
- ios - 在 Swift 中同时发送消息和关闭键盘
- algorithm - 如何解决这种重复以找出时间复杂度
- spring-kafka - @StreamListener 的自动启动
- javascript - p5.js 和 p5.sound.js 不适用于不同的机器
- r - R:如何在条形图中显示范围?
- jquery - Yajra DataTables:无法在表中加载记录
- javascript - Firebase 云函数 - null user.displayName onCreate
- angular - 如何在角度中找不到图像 src 404 时创建条件