2017-02-13 103 views
1

我正在构建反应原生应用程序,并遇到试图通过节点ID查找元素的问题。React Native - 按节点ID查找元素

一些背景:

我用我的登记表格表单库具有handleFormFocus功能。任何时候任何一个输入都会被聚焦,这会被触发。提供给该函数的参数是事件和组件ID(整数),这两个参数都没有给出关于哪个输入实际上关注的任何有用信息(即“email”),而是只给我一个ID。

当我反应过来用母语0.34我能做到以下几点:

const ReactNativeComponentTree = require('react/lib/ReactNativeComponentTree'); let targetComponent = ReactNativeComponentTree.getInstanceFromNode(component); let inputRef = targetComponent._currentElement.props.fieldRef;

但由于更新到0.41这个不再有效。我得到以下错误: Unable to resolve module react/lib/ReactNativeComponentTree

任何人都知道如何通过它的id找到一个元素与反应原生0.41?

谢谢你的时间!

+0

使用的元件的ID在反应机被认为是一种反模式。为什么不通过参考? – PaulBGD

+0

@PaulBGD你是对的。由于我使用了一个表单库,导致它不清楚如何访问输入字段的isFocused属性,因为库包装了一个TextInput组件,所以我遇到了不寻常的问题。无论如何,你的回应激发我想出来。谢谢! – jmtibs

+0

@PaulBGD:如果您能指出我们的文档警告这是一种反模式,那将是非常好的。在文档中找到如何以批准的方式实现相同的目标也非常困难。特别是对于将数组映射到List时生成的组件。 – hippietrail

回答

0

阵营0.41+:

import ReactNativeComponentTree from 'react-native/Libraries/Renderer/src/renderers/native/ReactNativeComponentTree'; 

阵营0.51+:

import ReactNativeComponentTree from 'react-native/Libraries/Renderer/shims/ReactNativeComponentTree';