React:如何处理 Table 中的大型 td Input 元素,每次发生状态更改时都会重新呈现?

React: How to deal with large td Input element in Table that re-render everytime when state changed occurs?

我不确定这是否是在 React 中推送 table 元素的正确方法,但我一直在这样做。因此,下面的这个 for 循环将在每次重新渲染时执行,或者在这种情况下,当我更改输入时执行。如果我有 100 个输入怎么办?

问题:

  1. 这是绘制 table 元素的正确方法吗?
  2. 不会重新渲染导致性能不佳,特别是如果您在 return 之前有某种循环?
  3. 如果这不是正确的方法。请告诉我正确的方法。
function App() {
const [inputs,setInputs] = useState({input1:'',input2:'',input3:''})


function handleOnChange(e){
  const {name,value} = e.target

  setInputs(prev => ({...prev, [name]:value}))
}

let tableElement = []

for(let i = 1; i <= 3; i++){
  tableElement.push(<tr  key={i}>
    <td><Input value={inputs[`${i}`]} name={`input${i}`} onChange={handleOnChange} /></td>
  </tr>)
}

  return (
      <div>
        <Table>
          <tbody>
             {tableElement}
          </tbody>
        </Table>
      </div>

  );
}

export default App;

给出的代码:

let tableElement = []

for (let i = 1; i <= 3; i++){
  tableElement.push((
    <tr key={i}>
      <td>
        <Input value={inputs[`${i}`]} name={`input${i}`} onChange={handleOnChange} />
      </td>
    </tr>
  ))
}

return (
  <div>
    <Table>
      <tbody>
         {tableElement}
      </tbody>
    </Table>
  </div>
);

问题:

  1. Is this the right way to draw table element?

这并没有错,尽管它可能不是将数组呈现给 JSX 的最常见方式。通常你可以选择将数组映射到 JSX

const tableElement = [...Array(3).keys()].map((i) => (
  <tr key={i}>
    <td>
      <Input value={inputs[`${i}`]} name={`input${i}`} onChange={handleOnChange} />
    </td>
  </tr>
));

return (
  <div>
    <Table>
      <tbody>
         {tableElement}
      </tbody>
    </Table>
  </div>
);

或者直接在 JSX 中

return (
  <div>
    <Table>
      <tbody>
        {[...Array(3).keys()].map((i) => (
          <tr key={i}>
            <td>
              <Input
                value={inputs[`${i}`]}
                name={`input${i}`}
                onChange={handleOnChange}
              />
            </td>
          </tr>
        ))}
      </tbody>
    </Table>
  </div>
);
  1. wouldn't re-render cause bad performance especially if you have some kind of loop before return?

我认为可能会出现性能不佳的情况,但由于 UI 的性质需要在组件呈现时映射出一堆数组元素,无论如何这是必要的工作。

React 已经非常优化,开箱即用。它使用协调过程来确定哪些映射元素 实际上 从以前的渲染中改变了,并且只重新渲染必要的元素。在映射数组时使用 React 键来帮助解决这方面的问题。

  1. If this is not the right way to do it. Please show me the right way to do it.

我在上面的第 1 点中分享了将数组映射到 JSX 的更常用方法。