【图片预览】第二种方式:hooks子组件调用父组件方法
1、ImgViewer/index.tsx
import React from 'react' import Viewer from 'react-viewer' interface ImgViewerProps { visible: boolean // 是否显示viewer images: Array
2、使用
import ImgViewer from '@/components/ImgViewer'
// 传递给 ImgViewer 组件的三个值 const [visible, setVisible] = useState<boolean>(false) const [activeIndex, setActiveIndex] = useState(0) const [images, setImages] = useState ([])
// 图片预览 const handleImgPreview = (list: Array, index: number) => { const imgList: Array
DOM:
<ImgViewer handleClose={setVisible.bind(this, false)} // 子组件中通过 handleClose 方法改变父组件中的state visible={visible} images={images} activeIndex={activeIndex} />
子调父的关键在于,将方法通过props传给子组件;
父调子的关键在于,子组件中通过useImperativeHandle钩子将方法暴露出去,父组件需要引入useRef去调用子组件暴露出来的方法。
对于数据流向,建议将数据放在父组件去处理,子组件只做展示用,不对数据进行操作