如何在 React 中存储来自输入字段的值?

IT技术 reactjs
2021-05-24 07:24:36

如何读取所有输入的输入值逗号分隔。在这里,我试图使用危险的SetInnerHTML 设置 html。html 包含三个输入字段,我如何读取在所有三个输入字段中输入的值。

假设我24在第一个输入字段中输入,然后12在第二个输入字段和2第三个输入字段中输入。所以现在我想保存状态变量逗号分隔的所有值,即

24,12,2

import React, { useState } from "react";
import "./styles.css";


const data = {
  htmltag: `<div><p><input type = 'text' /></p><p><input type = 'text' /></p><p><input type = 'text' /></p></div>`
};



export default function App() {

  const [state , setState] = React.useState("")

  const handleChange = () => {
    setState(prev => ({
      ...prev,
      state: 
    }));
    }

  return (
    <>
      <div onChange = {handleChange}
        dangerouslySetInnerHTML={{ __html: data.htmltag }}
      />
      <button> Submit </button>

      <p>values comma separated: {state} </p>
    </>
  );
}

1个回答

我强烈建议您不要使用dangerouslySetInnerHTML. 您基本上是在告诉 react,它无法管理或引用其中的元素。所以你只剩下直接的 DOM 遍历。

但我会假设你有一个很好的理由,这在你的例子中并不明显。


如果你给父元素 anid那么你可以用useEffect钩子拉出值

<div
    id="my-inputs"
    onChange={handleChange}
    dangerouslySetInnerHTML={{ __html: data.htmltag }}
/>

现在使用效果从这些 id 中提取数据并将它们置于如下状态:

useEffect(() => {
  const inputs = Array.from(document.querySelectorAll('#my-inputs input'))
  setState(  
    inputs
      .map(input => input.value)
      .join(',')
  )
})