如何对属性 htmlFor 使用 useRef?

Abi*_*idh 5 reactjs react-hooks

我想自定义文件上传的输入标签。这是我的代码。这里对于属性 htmlFor,我给出了输入标签的 id。然后它就可以工作了。但是我想使用 useRef ref。我怎样才能做到这一点 ?如果我按照下面的方法,如果我多次渲染这个组件就会有问题。对 ?

const App = () => {
  const inputRef = useRef(null);
  const [file, setFile] = useState(null);
  return (
    <>
      <input
        ref={inputRef}
        accept=".pdf"
        style={{ display: "none" }}
        id="raised-button-file"
        multiple
        type="file"
        onChange={e => {
          setFile(e.target.files[0]);
        }}
      />
      <label htmlFor="raised-button-file">
        <button component="span">
          <span>file</span>
        </button>
      </label>
    </>
  );
};
Run Code Online (Sandbox Code Playgroud)

jun*_*n-k 5

使用<label>标记的另一种方法是将您的元素包装为子元素而不id为其指定 an 。

<label>
  <input
    accept=".pdf"
    style={{ display: "none" }}
    multiple
    type="file"
    onChange={e => {
      setFile(e.target.files[0]);
    }}
  />
  <span>File</span>
</label>
Run Code Online (Sandbox Code Playgroud)

如果你更喜欢用你的 ref 打开你的文件输入对话框,你可以这样做。

const handleOpenFileInput = () => {
  inputRef.current.click();
};
Run Code Online (Sandbox Code Playgroud)
<label onClick={handleOpenFileInput}>
  <button>file</button>
</label>
<input
  ref={inputRef}
  accept=".pdf"
  style={{ display: "none" }}
  multiple
  type="file"
  onChange={e => {
    setFile(e.target.files[0]);
  }}
/>
Run Code Online (Sandbox Code Playgroud)