import React, { useState, useRef, useEffect } from "react";

const Child = (props) => {
 const [count, setCount] = useState(0);

 // 暴露方法
 useEffect(() => {
   if (props.bindRef) {
     props.bindRef({
       increment: () => setCount((c) => c + 1),
       reset: () => setCount(0),
       getValue: () => count,
     });
   }
 }, [props.bindRef, count]);

 return (
   <div style={{ border: "1px solid #ccc", padding: 16 }}>
     <p>子组件计数: {count}</p>
     <button onClick={() => setCount(count + 1)}>子组件 +1</button>
   </div>
 );
};

const Parent = () => {
 const childApi = useRef(null);

 const handleReset = () => {
   childApi.current?.reset();
 };

 const handleIncrement = () => {
   childApi.current?.increment();
 };

 const handleGetValue = () => {
   alert(`当前子组件 count 值为:${childApi.current?.getValue()}`);
 };

 return (
   <div style={{ padding: 20 }}>
     <h2>父组件</h2>
     <div style={{ marginBottom: 10 }}>
       <button onClick={handleIncrement}>父组件调用 +1</button>{" "}
       <button onClick={handleReset}>父组件调用 reset()</button>{" "}
       <button onClick={handleGetValue}>获取子组件值</button>
     </div>
     <Child bindRef={(api) => (childApi.current = api)} />
   </div>
 );
};

export default Parent;