React-父组件访问子组件内部

父子组件通信

典型数据流:父组件向后代组件传递props,当props更新则接收对应值的后代组件触发重新渲染;

如果希望父组件能够访问子组件内部的信息则需要典型数据流之外的其他方法。

ref

React的ref表示对组件实例的引用

普通组件:

详情链接

详情链接

React的忠告

》》》

不要过度使用 Refs

你可能首先会想到在你的应用程序中使用 refs 来更新组件。如果是这种情况,请花一点时间,重新思考一下 state 属性在组件层中位置。通常你会想明白,提升 state 所在的组件层级会是更合适的做法。有关示例,请参考状态提升.

《《《

不能用高阶组件传递refs引用,如果向一个由高阶组件创建的组件的元素添加ref应用,那么ref指向的是最外层容器组件实例而非包裹组件。

最好不用ref,使用状态提升传递props是更好的选择;确实需要时可以考虑React.forwardRef;

React.forwardRef

高阶组件中,通过组件向一个后代组件传递ref,从而能够访问到该子组件(与标准数据流相反);

 使用rc-form增强的Form组件

解决方案:rc-form

详情链接

Note: use wrappedComponentRef instead of withRef after [email protected]

class Form extends React.Component { ... }

// deprecated
    const EnhancedForm = createForm({ withRef: true })(Form);
    <EnhancedForm ref="form" />
    this.refs.form.refs.wrappedComponent // => The instance of Form

// Recommended
    const EnhancedForm = createForm()(Form);
    <EnhancedForm wrappedComponentRef={(inst) => this.formRef = inst} />
    this.formRef // => The instance of Form

需要引入‘rc-form‘模块中的createForm方法;

antd中经过Form.create()增强的Form组件

类似rc-form,同样使用wrappedComponentRef

经过 Form.create 之后如果要拿到 ref,可以使用 rc-form 提供的 wrappedComponentRef

class CustomizedForm extends React.Component { ... }

    // use wrappedComponentRef
    const EnhancedForm =  Form.create()(CustomizedForm);
    <EnhancedForm wrappedComponentRef={(form) => this.form = form} />
    this.form // => The instance of CustomizedForm
    const EnhancedForm = Form.create()(MyForm);
    const Parent extends Component {
    //父组件中引入EnhancedForm后,通过this.form可以访问EnhancedForm子组件

    handleSubmit = () => {
         //handleOk是子组件的内部方法,可能包含验证和提交处理数据等功能;
        this.form.handleOk();
    }
    render() {
        return (
            <EnhancedForm wrappedComponentRef = {(form) => this.form = form} />
            <Button onClick={ this.handleSubmit}/>
        )
    }

}

原文地址:https://www.cnblogs.com/muTing/p/9503063.html

时间: 2024-10-10 09:43:43

React-父组件访问子组件内部的相关文章

vue父组件访问子组件

1.父组件(父组件访问子组件的方法drop) <!--父组件访问子组件的方法v-ref:shopcart--> <template> <div id="parent"> <shopcart v-ref:shopcart></shopcart> </div> </template> <script> export default { methods:{ _drop(target) { // 体

iview2.0 父组件访问子组件 方法

//从父组件中访问子组件 可以给子组件定义标识 通过ref="chead" 定义  通过父组件就可以访问了

React 父组件触发子组件事件

Parent组件 import React from "react"; import Child from "./component/Child"; class Parent extends React.Component { render() { return ( <div> 我是父组件 <Child childEvevnt={this.childEvevnt} /> <button onClick={this.triggerEvev

react 父组件向子组件传递函数

这段时间一直在使用react,由于这react是单向数据绑定,总感觉有点不适用,毕竟之前一直都在使用angular,但学习还是要继续,做了一个迭代的项目,都差点忘记要总结一下这个react了,现在可以写点东西了.(react 新手,仅仅参考) 1.react一开始我更理解为是一个各种代码片段,由于之前接触了一段时间meteor,感觉有点相似.在使用之前都要在app.js中将一总的父组件通过import导入,另外在route中的path中写入链接 例如:import createHistory f

React Hook父组件获取子组件的数据/函数

我们知道在react中,常用props实现子组件数据到父组件的传递,但是父组件调用子组件的功能却不常用.文档上说ref其实不是最佳的选择,但是想着偷懒不学redux,在网上找了很多教程,要不就是hook的讲的太少,要不就是父子组件傻傻分不清,于是只好再啃了一下文档,就学了一下其它hook的api. 在这里我们需要用到useImperativeHandle这个api,其函数形式为 useImperativeHandle(ref, createHandle, [deps]) 其实这个api也是ref

react ,父子调用子组件的方法与子组件调用父组件的方法

1.父组件调用子组件的方法给子组件的标签 定义一个属性,例如 ref="zizu" ------------- 父组件通过,this.refs.biaoji.dream('哈哈') //调用子组件的dream方法 2.子组件调用父组件的方法 2.1.首先父组件需要通过给子组件自定义属性,把方法传递给子组件.2.2.子组件通过this.props 接收父组件的方法,this.props.方法名称().这样就可以调用父组件的方法了 原文地址:https://www.cnblogs.com/

VUe.js 父组件向子组件中传值及方法

父组件向子组件中传值 1.  Vue实例可以看做是大的组件,那么在其内部定义的私有组件与这个实例之间就出现了父子组件的对应关系. 2. 父子组件在默认的情况下,子组件是无妨访问到父组件中的数据的,所以要想在子组件中使用父组件的数据的时候,就需要以属性绑定的形式,将父组件的数据传递到子组件中.     3. 通过属性绑定传递来的数据无法再子组件中直接使用,需要在props中重新定义以后才可以使用.例:props:['变量名'].props是一个数组.    4. 子组件中的data数据都是私有,子

vue--父组件向子组件传参--父组件定义v-bind:参数名--子组件接收props----子组件调用父组件的方法(子组件向父组件传参)父组件@事件名称--子组件接收this.$emit

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

vue组件-#构成组件-父组件向子组件传递数据

组件对于vue来说非常重要,学习学习了基础vue后,再回过头来把组件弄透! 一.概念 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B . 它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件. 在 Vue.js 中,父子组件的关系可以总结为 props down, events up . 父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息. 看看它们是怎么工作的.