代码之家  ›  专栏  ›  技术社区  ›  Taylor Austin

带react的输入掩蔽

  •  1
  • Taylor Austin  · 技术社区  · 6 年前

    如何使用react进行输入屏蔽:

    这就是我目前所拥有的。我似乎无法正确更新该值,我还希望当他们单击输入时光标位于开头。我有点困在这里了。

    输入的预期输出: 0_ / _ _ = & gt; 0 9 / 0 _ = & gt; 0 9 / 0 9

    import React, { Component } from 'react';
    import './App.css';
    
    class App extends Component {
      constructor(props) {
        super(props);
        this.state = {
          inputValue: ''
        };
    
        this.update = this.update.bind(this);
      }
      update(e) {
        e.preventDefault();
        const formatString = '_ _ / _ _';
        const newString = `${e.target.value}${formatString.slice(
          e.target.value.length
        )}}`;
        this.setState({ [e.target.name]: newString });
      }
      render() {
        return (
          <div>
            <input
              type="text"
              onChange={this.update}
              name="inputValue"
              value={this.state.inputValue}
              onFocus={() => this.setState({ inputValue: '_ _ / _ _' })}
            />
          </div>
        );
      }
    }
    
    export default App;
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   nextt1    6 年前

    onChange 每次在输入框中键入新字符时都将调用事件。所以你只需要那个字符串的最后一个字符。按以下步骤完成。

    const lastChar = e.target.value[e.target.value.length - 1];

    现在需要在格式化字符串中的微粒位置替换它。为了跟踪位置,我使用 count 状态变量。更新count变量是一个非常简单的逻辑,特定于输入字符串(位置0、2、6、8需要按相同的顺序替换)。最后,您将用刚刚提取的最后一个字符替换该特定位置。

    const newString = prevString.substr(0, count) + lastChar + prevString.substr(count + 1);

    这是一个有效的例子。 https://codesandbox.io/s/432608n5w7