[英]React Multiple function in parent and child components
I'm trying to pass 2 functions in on onChange event.我试图在 onChange 事件中传递 2 个函数。
I know how to do this in the same file but I'm struggling to do it when I have one function in the child and another one in the parent component.我知道如何在同一个文件中执行此操作,但是当我在子组件中有一个 function 而在父组件中有另一个时,我很难做到这一点。
This is my child component:这是我的子组件:
export const ImageUpload = () => {
const [selectedFile, setSelectedFile] = useState()
const [preview, setPreview] = useState()
// create a preview as a side effect, whenever selected file is changed
useEffect(() => {
if (!selectedFile) {
setPreview(undefined)
return
}
const objectUrl = URL.createObjectURL(selectedFile)
setPreview(objectUrl)
// free memory when ever this component is unmounted
return () => URL.revokeObjectURL(objectUrl)
}, [selectedFile])
const onSelectFile = e => {
if (!e.target.files || e.target.files.length === 0) {
setSelectedFile(undefined)
return
}
// I've kept this example simple by using the first image instead of multiple
setSelectedFile(e.target.files[0])
}
return (
<div>
<input type='file'
onChange={onSelectFile}
/>
{selectedFile && <img src={preview} />}
</div>
)
}
My parent is:我的父母是:
<ImageUpload
// onChange= add an extra function here
/>
How I should add an extra function on onChange on the parent我应该如何在父级的 onChange 上添加额外的 function
You can pass function in props like this您可以像这样在 props 中传递 function
<ImageUpload
changeFunction = {your function here}
/>
and accept the props and use two function onChange like this.并接受道具并像这样使用两个 function onChange。
export const ImageUpload = (props) => {
const [selectedFile, setSelectedFile] = useState()
const [preview, setPreview] = useState()
// create a preview as a side effect, whenever selected file is changed
useEffect(() => {
if (!selectedFile) {
setPreview(undefined)
return
}
const objectUrl = URL.createObjectURL(selectedFile)
setPreview(objectUrl)
// free memory when ever this component is unmounted
return () => URL.revokeObjectURL(objectUrl)
}, [selectedFile])
const onSelectFile = e => {
if (!e.target.files || e.target.files.length === 0) {
setSelectedFile(undefined)
return
}
// I've kept this example simple by using the first image instead of multiple
setSelectedFile(e.target.files[0])
}
return (
<div>
<input type='file'
onChange={onSelectFile; props.changeFunction}
/>
{selectedFile && <img src={preview} />}
</div>
)
}
pass a function to child from parent将 function 从父母传递给孩子
export const ImageUpload = ({onChange}) => {
const onSelectFile = e => {
onChange() //call here
}
}
in parent在父母
const onChange = () => {
}
<ImageUpload
onChange={onChange}
/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.