【问题标题】:Input type number not updating value on enter输入类型号不更新输入值
【发布时间】:2019-06-03 10:42:27
【问题描述】:

App 包含一个输入元素,该元素在输入、模糊和下一个按钮单击时更新。当我在开发工具中检查元素时,value 属性会在模糊和下一步按钮单击时更新,但不会在输入时更新。

import * as React from "react";
import { render } from "react-dom";

interface IAppProps {
  InputVal: number;
  onEnter: (num: number) => void;
}

const Parent: React.FC = () => {
  const [currentValue, setCurrentValue] = React.useState(1);
  const grabVal = (val: number) => {
    console.log("New value::", val);
    setCurrentValue(val);
  };

  return <App InputVal={currentValue} onEnter={grabVal} />;
};

const App: React.FC<IAppProps> = ({ InputVal, onEnter }) => {
  const inputRef: any = React.createRef();
  const handleEnterKey = (e: any) => {
    if (e.keyCode === 13) {
      onEnter(Number((e.target as HTMLInputElement).value));
    }
  };

  const nextClick = (e: any) => {
    inputRef.current.value = InputVal + 1;
    onEnter(InputVal + 1);
  };

  const blurry = (e: any) => {
    onEnter(Number(e.target.value));
  };

  return (
    <>
      <input
        type="number"
        onKeyUp={handleEnterKey}
        ref={inputRef}
        defaultValue={InputVal as any}
        onBlur={blurry}
      />
      <button onClick={nextClick}>Next</button>
    </>
  );
};

render(<Parent />, document.getElementById("root"));

如何在输入点击时更新它?

工作演示:https://codesandbox.io/s/react-typescript-7bkl7

【问题讨论】:

    标签: html reactjs typescript


    【解决方案1】:

    你想更新什么?

    代码在理论上按照它应该的方式工作,但是当您执行 keyup 调用并在事件处理程序中所做的只是控制台记录值并将其设置为新状态。

    在下一个方法调用中增加数字的唯一方法。

     <input
            type="number"
            onKeyUp={handleEnterKey}
            ref={inputRef}
            defaultValue={InputVal as any}
            onBlur={blurry}
            value={InputVal as number}
          />
    

    【讨论】:

    • 我想查看输入时更新的 value 属性、更新方式 onBlur 和单击下一步按钮。
    • onBlur 除了触发父级中的 console.log 之外什么都不做,按钮单击更新子级 UI 的唯一原因是您在第 30 行明确设置值,删除该 inputRef .current.value = InputVal + 1;并且用户界面不会更新。查看输入元素的 value 属性
    • 使用您的代码,您无法在该字段中输入任何内容。
    • 查看我的blurry func,它的作用与handleEnterKey 相同,但是当blurry 触发时,它实际上会更新输入的value 属性。只需检查开发工具中的元素。对于handleEnterKey,它不会这样做
    • 我很确定您的问题的原因是使用 defaultValue 与 value。
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2015-09-20
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多