简体   繁体   English

在父子组件中反应多个 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM