【发布时间】:2021-09-14 15:12:34
【问题描述】:
代码沙盒:https://codesandbox.io/s/vigilant-elgamal-dciqs
当我输入图像并尝试在同一个容器上显示其预览时,只有第一个容器中的图像会更新,即 setImage 仅更改第一个组件的 photo 值。我该如何解决这个问题?
App.js
import { useState } from "react";
import "./styles.css";
import InputContainer from './InputContainer'
export default function App() {
const [inputArr,setInputArr] = useState([])
const addInputContainer=()=>{
setInputArr([...inputArr,''])
}
return (
<div className="App">
<button onClick={addInputContainer}>Add Input-Container</button><br/>
{inputArr.map((input,index)=>{
return <InputContainer key={index}/>
})}
</div>
);
}
InputContainer.jsx
import { useState } from "react";
const InputContainer = () => {
const [image, setImage] = useState("");
const handleClick = () => {
document.querySelector(".input-image").click();
};
const handleInput = (e) => {
const selected = e.target.files[0];
if (!selected) return;
let reader = new FileReader();
reader.readAsDataURL(selected);
reader.onload = () => {
setImage(reader.result);
};
};
return (
<div className="input-container" onClick={handleClick}>
{image ? <img src={image} className="image" /> : "Click For input"}
<input
type="file"
onChange={handleInput}
className="input-image"
style={{ display: "none" }}
/>
</div>
);
};
export default InputContainer;
【问题讨论】:
标签: javascript html reactjs react-hooks