呵呵哒看世界 發表於 2019-10-10 14:11:00

React Hooks中父组件中调用子组件方法

<h1><br>React Hooks中父组件中调用子组件方法</h1>
<p>使用到的hooks--&nbsp;useImperativeHandle,useRef</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">/* child子组件 */
// https://reactjs.org/docs/hooks-reference.html#useimperativehandle
import {useState, useImperativeHandle} from 'react';
...
// props子组件中需要接受ref
const ChildComp = ({cRef}) =&gt; {
        const = useState();
        // 此处注意useImperativeHandle方法的的第一个参数是目标元素的ref引用
        useImperativeHandle(cRef, () =&gt; ({
                // changeVal 就是暴露给父组件的方法
          changeVal: (newVal) =&gt; {
              setVal(newVal);
          }
        }));
        ...
        return (
                &lt;div&gt;{val}&lt;/div&gt;
        )
}
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">/* FComp 父组件 */
import {useRef} from 'react;
...
const FComp = () =&gt; {
        const childRef = useRef();
        const updateChildState = () =&gt; {
                // changeVal就是子组件暴露给父组件的方法
                childRef.current.changeVal(99);
        }
        ...
        return (
                &lt;&gt;
                        {/* 此处注意需要将childRef通过props属性从父组件中传给自己 cRef={childRef} */}
                        &lt;ChildCompcRef={childRef} /&gt;
                        &lt;button onClick={updateChildState}&gt;触发子组件方法&lt;/button&gt;
                &lt;/&gt;
        )
}
</pre>
</div>
<p>  </p>
<p>&nbsp;</p>
<p>方法二、参考react官方文档:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">import {useState, useImperativeHandle,forwardRef} from 'react';
// props子组件中需要接受ref
let ChildComp = (props,ref) =&gt; {
        // 此处注意useImperativeHandle方法的的第一个参数是目标元素的ref引用
        useImperativeHandle(ref, () =&gt; ({
                // changeVal 就是暴露给父组件的方法
          changeVal: (newVal) =&gt; {
             
          }
        }));
        return (
                &lt;div&gt;{val}&lt;/div&gt;
        )
}
ChildComp = forwardRef(ChildComp)
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">/* FComp 父组件 */
import {useRef} from 'react';
const FComp = () =&gt; {
        const childRef = useRef();
        const updateChildState = () =&gt; {
                // changeVal就是子组件暴露给父组件的方法
                childRef.current.changeVal(99);
        }
        return (
                &lt;&gt;
                        &lt;ChildComp ref={childRef} /&gt;
                        &lt;button onClick={updateChildState}&gt;触发子组件方法&lt;/button&gt;
                &lt;/&gt;
        )
}
</pre>
</div>
<p>  </p>
<p>&nbsp;注意:</p>
<p><code>useRef</code>&nbsp;仅能用在 FunctionComponent,<code>createRef</code>&nbsp;仅能用在 ClassComponent。</p><br><br>
来源:https://www.cnblogs.com/muamaker/p/11647626.html
頁: [1]
查看完整版本: React Hooks中父组件中调用子组件方法