react中关于父子组件传值已经方法调用总结

发布时间 2023-10-13 12:04:54作者: 夏目友人喵

问题:

1、封装自定义组件后,父子组件的传值与方法调用则是必须进行的操作,但是在网上看到多种的方法后,

  • 有的方法一个组件下好使,但是换一个组件后就不好用了
  • 有的方法根本就不好使,不知道是什么原因

2、父子组件之间的传值都是用props这个毫无疑问,也没有什么问题

3、父子组件方法调用则是上面提到的问题了,最终找到了一个使用方法,解决的我遇到的问题

父组件

/*
 * @LastEditors: xxxxx
 * @LastEditTime: 
 * @Description: useRef(null)、ref={childRef}
 */

import React, { useRef, useState } from 'react' import { Button, Modal, Popconfirm, Table, Tabs } from 'antd' import type { ColumnsType } from 'antd/es/table' import DetailModal from './add' import './index.scss' const App: React.FC = () => { const childRef: any = useRef(null) const getSubmitList = item => { // 子组件信息 // console.log('子组件信息', item) console.log('子组件信息', childRef) childRef?.current?.onclick() } return ( <> <Button type='primary' className='add-btn' onClick={getSubmitList}> 新增菜单 </Button> <DetailModal msg={'open'} ref={childRef} /> </> ) } export default App

 

子组件

/*
 * @LastEditors: xxxxx
 * @LastEditTime: 
 * @Description: 父组件传值:props, 父组件调用子组件方法: forwardRef, useImperativeHandle

*/
import { Button, Checkbox, Col, Form, Radio, Rate, Row, Select, Space } from 'antd'
import { forwardRef, useImperativeHandle } from 'react'
 
 
const App = (props, ref) => {
  console.log('msg', props.msg)
  useImperativeHandle(ref, () => ({
    onclick,
  }))
  const onclick = () => {
    console.log('Received values of form: ')
  }
   
  return (
    <>
      <Form>
      </Form>
    </>
  )
}
 
export default forwardRef(App)