2017-02-13 105 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';