处理一组输入 -React

Handle an array of inputs -React

我有一个 table,我需要在其中列出输入元素。它们将有一个默认值,您可以将它们的值从最大数量(默认值)更改为 0 或发送此 maxNumber。输入元素旁边是发送按钮。 Button 将从输入元素中获取值并将其发送到 API。这是我的部分代码:

const [valueInput,setValueInput]=React.useState(0);


         {array.map((x) => (
            <TableRow
            key={x.id}
            >
         <TableCell>{x.maxNumber}</TableCell>
               <TableCell>
              <input
                  key={x.id}
              value ={valueInput}
     
              onChange={ event => {
                 setValueInput(event.target.value);
              parseInt(event.target.value,valueInput)
               }}
              type="number"
              min="0"
              max= {x.maxNumber}
            />
                  <IconButton
                    key={x.id}
                    onClick={() => {
                      
                      team.setTeamNumber(x.id,valueInput);
                    }}>
                    <Check />
                  </IconButton>
          </TableCell>
            </TableRow>
))}

任何人都可以帮助我如何将 valueInput 设置为 x.maxNumber - 来自数组,或者任何关于如何在没有 useState 的情况下解决这个问题的建议。

您可以将带有输入的 table 行放入一个单独的组件中,并在那里设置输入状态。然后将行 ID 和输入值传递给更改的父组件。例如

function TableRow({ id, inputValue, onInputChange }) {
  const [inputVal, setInputVal] = React.useState(inputValue);
  
  function handleInputChange(e) {
    setInputVal(e.target.value);
    onInputChange(id, e.target.value);
  }
  
  return (
    <tr>
      <td style={{ 'border': '1px solid black' }}>{inputValue}</td>
      <td style={{ 'border': '1px solid black' }}>
        <input type="number" value={inputVal} onChange={handleInputChange} />
      </td>
    </tr>
  );
}

function Table() {
  const rowsArr = [
    { id: '123', maxNum: 1 },
    { id: '456', maxNum: 2 }
  ];
  
  function handleInputChange(inputId, inputValue) {
    console.log(`Input with id ${inputId} has value ${inputValue}`);
   
  }

  return (
    <div>
      <table style={{ 'border': '1px solid black' }}>
        <tbody>
          {rowsArr.map((x) => <TableRow key={x.id} id={x.id} inputValue={x.maxNum} onInputChange={handleInputChange} />)}
        </tbody>
      </table>
    </div>
  );
}

function App() {  
  return (
    <div>
      <Table />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>