react flatlist example listview this react-native

listview - flatlist - react native table



este valor es nulo en la funciĆ³n(React-Native) (3)

Si desea pasar la función a un componente de terceros, siempre pase funciones como esa:

<Carousel renderItem={item => this._renderItem(item)} />

Cuando se enlaza una función así, no se pierde la instancia de la función en otras clases

Según las pruebas locales, ''esto'' parece ser nulo dentro de la función de procesamiento de filas. Como resultado, esto me impide vincular una función local en el prop onPress.

Tengo este bloque de render:

render() { return ( <ListView dataSource={this.state.dataSource} renderRow={this._renderRow} renderHeader={this._renderHeader} style={styles.listView} /> ); }

y una función local

_visitEntryDetail() { console.log(''test''); }

luego fila render

_renderRow(something) { return ( <TouchableHighlight style={[styles.textContainer, filestyle.container]} onPress={this._visitEntryDetail.bind(this)} > <View> <Text style={filestyle.text1} >{something.detail}</Text> <Text style={filestyle.text2} >{something.size}, {something.timestamp}</Text> </View> </TouchableHighlight> ); }

Esto devuelve

message: null is not an object (evaluating ''this.$FileList_visitEntryDetail'')"

al marcar "esto" en renderRow, se devuelve nulo al reemplazar el código anterior con:

_renderRow(file) { console.log(this); return ( <TouchableHighlight style={[styles.textContainer, filestyle.filelistcontainer]} >

Con la siguiente salida de consola:

RCTJSLog> null

pero está bien cuando

render() { console.log(''inside render. this value is below me''); console.log(this); return ( <ListView

consola

RCTJSLog> "inside render. this value is below me" RCTJSLog> [object Object]

¿Alguien por favor puede indicar qué está causando esto Gracias.


Una alternativa a la solución de NightFury sería utilizar la sintaxis de la función de flecha de ES6 sin tener que vincular manualmente la función en el constructor. Tu render() se vería así:

render() { return ( <ListView dataSource={this.state.dataSource} renderRow={() => this._renderRow()} renderHeader={() => this._renderHeader()} style={styles.listView} /> ); }


this es nulo porque _renderRow no se ha enlazado a la clase actual. Por favor ten en cuenta:

En el constructor, debe vincular explícitamente una función, si desea pasarla a cualquier componente de reacción, ya que a veces no se vincula de forma implícita.

Esta declaración se aplica a cualquier función que se pase al componente. Por ejemplo, desea llamar a una función callThisFunction al presionar TouchableHighlight . Puedes atarlo por:

class SomeComponent extends Component { constructor(props) { super(props) //binding function this.renderRow = this.renderRow.bind(this) this.callThisFunction = this.callThisFunction.bind(this) } renderRow() { console.log(this) //not null now return ( <View> <TouchableHighlight onPress={this.callThisFunction}> <Image source={require(''image!prev'')}/> </TouchableHighlight> </View> ) } callThisFunction() { console.log(this) //not null now } }