Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 访问DOM树下的组件_Reactjs - Fatal编程技术网

Reactjs 访问DOM树下的组件

Reactjs 访问DOM树下的组件,reactjs,Reactjs,我有一个表单验证,在提交时通过所有子项递归,检查子项是否是我的自定义“表单字段”组件(输入()、复选框()、选择框())等),根据一些验证规则检查组件的值,如果值无效,则用“无效”属性克隆组件。验证工作正常,无效的“表单字段”组件显示无效字段的样式。表单提交后,验证以内联方式进行 如果表单无效,我希望在表单提交后将页面滚动到第一个无效元素,但不幸的是,组件没有公开底层DOM 3(通过Fiber对象除外),并且我无法获取任何组件的“ref” 我通读了与本主题相关的所有文档和React问题,显然不可

我有一个表单验证,在提交时通过所有子项递归,检查子项是否是我的自定义“表单字段”组件(输入()、复选框()、选择框())等),根据一些验证规则检查组件的值,如果值无效,则用“无效”属性克隆组件。验证工作正常,无效的“表单字段”组件显示无效字段的样式。表单提交后,验证以内联方式进行

如果表单无效,我希望在表单提交后将页面滚动到第一个无效元素,但不幸的是,组件没有公开底层DOM 3(通过Fiber对象除外),并且我无法获取任何组件的“ref”

我通读了与本主题相关的所有文档和React问题,显然不可能访问组件的DOM树(除非通过ref转发,我试图避免这种情况,因为我希望表单处理所有与验证相关的代码)

这个问题是我最后一次尝试:React中是否有一种本地方式可以从父组件访问组件的DOM树而不使用ref转发

更新 当我克隆组件时,我将获得ref:

updateField = (field, validationRule) => 
  React.cloneElement(field, {
       invalid: true,
       validationMessage: validationRule.message(field.props),
       ref: node => node && this.invalidFields.push(ReactDOM.findDOMNode(node))
  });

您可以通过执行ref转发将子dom公开给父dom。谢谢。是的,我可以,但我必须在每个表单字段组件上实现ref转发,这是我试图避免的。我正在尝试将所有与验证相关的功能封装在表单本身中。在这种情况下,需要在组件流动时。。它们是如何连接的。:)我不确定我是否理解你的意思:/I我可以,但我必须在每个表单字段组件上实现ref转发,这是我试图避免的。我试图将所有与验证相关的功能封装在表单本身中。-这两件事如何相互矛盾?您将转发引用并在父组件中使用它们,对吗?