繁体   English   中英

React Native:在ListView中引用

[英]React Native: Refs in ListView

看起来很难直接访问视图的引用。

现在我有一个包含单元格的列表视图。 renderRow函数中,我有类似的东西:

renderRowView: function(rowData){
  return 
    <View >
        <TextInput
           ref="text"
        />
    </View>
},

在这种情况下,如果我想使用ref访问此TextInput,它将是undefined

我在Github上看到了一个线程( https://github.com/facebook/react-native/issues/897 ),提到了解决这个问题的方法,但我仍然无法理解如何使用它:

render: function() {
  return (
    <ListView
      dataSource={this.state.dataSource}
      renderRow={(rowData, sec, i) =>
        <Text ref={(row) => this.rows[sec][i] = row}>{rowData}</Text>
       }
    />
  );
},

请帮助我理解这个ref函数是如何工作的,以及如何使用它(即以编程方式关注行中的TextInput 。)。 谢谢!

React组件上的ref属性可以是stringcallback函数,它将在第一个参数中使用组件调用。

因此,将函数传递给ref属性将在安装组件时执行它,组件本身在第一个参数中。

你粘贴的github代码是在通过ref callback属性挂载时将组件添加到二维数组中。 row参数本质上是<TextInput/>本身。

你想达到什么目的? 可能有一个更简单,更清洁的解决方案。


编辑:关于你想要实现的目标,这将有效:

render: function() {

    return (
        <ListView
            dataSource={this.state.dataSource}
            renderRow={(rowData) => {
                var inputRefs = [];

                var _focusInput = function(name) {
                    inputRefs[name].focus();
                };

                var input1 =
                    <TextInput 
                        ref={(input) => {
                            inputRefs['input1'] = input;
                        }}
                        onSubmitEditing={_focusInput.bind(null, 'input2')}
                        onEndEditing={_focusInput.bind(null, 'input2')} />;


                var input2 =
                    <TextInput 
                        ref={(input) => {
                            inputRefs['input2'] = input;
                        }} />;

                return (
                    <View>
                        {input1}
                        {input2}
                    </View>
                );
            }}/>
    );
}

您可以在https://facebook.github.io/react-native/docs/textinput.html#content中深入了解TextInput事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM