React Hooks + ts 父组件调用子组件方法 笔记

父组件:Login.tsx 子组件:PhoneInput.tsx 父组件点击登录按钮时调用子组件检查手机号码格式的方法

父组件代码

//Login.tsx
import React,{
          
   useState,useRef} from react
import PhoneInput from ../components/phoneInput/PhoneInput

interface PhoneRef{
          
   
  checkPhone:(phone:number) => boolean
}

function Login(){
          
   
  let [phone,setPhone] = useState<number>()
  const phoneRef = useRef<PhoneRef>()
  const loginFunc = () => {
          
   
    console.log(phoneRef.current?.checkPhone(phone as number))
  }
  return(
    <div>
      <PhoneInput
      	//这里直接传ref参数 子组件不能通过props.ref拿到,只理解到ref是rect的内置对象,不会被当成props传入子组件。后续需要再多了解原理,
        onRef={
          
   phoneRef}
      ></PhoneInput>
      <button className="button" onClick={
          
   () => {
          
   loginFunc()}}> 登 录</button>
    </div>
  )
}
export default Login

子组件代码

//PhoneInput.tsx
import React,{
          
   PropsWithChildren, useImperativeHandle} from react

interface PhoneProps {
          
   
	onRef: React.MutableRefObject<object | undefined>
}

const PhoneInput: React.FC<PhoneProps>= (props: PropsWithChildren<PhoneProps>) => {
          
   
	let [phone,setPhone] = useState<number>()
	useImperativeHandle(props.onRef,() => {
          
   
		return {
          
   
			checkPhone : (phone:Number):Boolean => {
          
   
				return /^[1][0-9]{10}$/.test(String(phone))
			}
		}
	})
	
	return (
		<div className="group">
			<input 
				placeholder="手机号"
				type="search" 
				className="input"
				value={
          
   phone}
			/>
		</div>
	)
}
export default PhoneInput

不相关的代码都被删掉了,这些东西基本上都是百度甚至看着报错类型信息写出来的,所以原理基本不了解,只做记录,后面要加强知识点学习。

经验分享 程序员 微信小程序 职场和发展