管理输入的 onChange

Manage onChange on input


我正在开发一个 ReactJS 应用程序,其中有一个 JSON 来自数据库并存储在 Redux 存储中。
{
  prodName: "Name",
  quantity: 5
}

使用此对象的数量 属性,我在屏幕上呈现输入,如下所示。

<input type="number" value=quantity onChange={this.handleQuantityChange} />

此处使用 handleQuantityChange

handleQuantityChange(event) => {
  if(event.target.value > 0) updateQuantity(event.target.value);
}

updateQuantity() 函数触发一个动作并更新数据库中的数量,从而更新 JSON,从而在屏幕上呈现更新后的数量。
到这里一切都很好。

问题是,我无法在输入一位数字后更新数量。就像在这个例子中,我可以把这个数量从 5 变成 51、52、53 或 510 或 5200 等等,但我不能把它变成 6 或 7 或 2。

这是因为 if conditionhandleQuantityChange 函数中给出,但我无法删除条件,因为 API 会抛出错误在发送 NaN0 值时。
还尝试将此数量存储在组件的 localState 中,但随后数据库值和输入值彼此不同步,为了更新数量,我们只发生了一个 onChange 事件。
关于如何管理此 onChange 函数的任何方法。
提前致谢。

看看下面的实现:

const data = {
  prodName: 'Name',
  quantity: 5
};

const App = () => {
  const [value, setValue] = React.useState(data.quantity); // GET INITIAL VALUE FROM GLOBAL STATE

  // THIS WAY YOU MAKE THE INPUT A "CONTROLLED INPUT"
  const onChangeHandler = React.useCallback((e) => {
    setValue(e.target.value);
  }, []);
  
  React.useEffect(() => {
    const quantity = parseInt(value);
    
    if (quantity) {
      // UPDATE DATABASE HERE!
      console.log('NEW VALUE', quantity);
    }
  }, [value])

  return (
    <input type={'number'} value={value} onChange={onChangeHandler} />
  );
};

ReactDOM.render(<App/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>

<div id='root'></div>