2017-01-19 2 views
1

У меня есть listview в index.js мой ответный родной проект, как показано ниже.Как получить доступ к родительской функции из импортированного элемента

import ResultRow from './resultRow' 

class ResultList extends Component { 
    constructor() { 

    } 

    updateDate(){ 
     //Some operation 
    } 

    onPressRow() { 
     try { 
      console.log("Selected!"); 

     //Some operation 

      this.updateDate(); // Got undefined is not a function 

     } catch (error) {  
      console.error(error); 
     } 
    } 

    renderRow(rowData) { 
     return (
      <ResultRow 
      onPress={this.onPressRow} 
      {...rowData} /> 
     ) 
     } 

    render() { 
     return (
       <ListView 
       style={[styles.container, { padding: 10, backgroundColor: '#ddd' }]} 
       dataSource={this.state.dataSource} 
       renderRow={this.renderRow.bind(this)} /> 
      ); 
    } 

} 

И список связывания элементов, используя этот шаблон resultRow.js файл, как показано ниже.

import React from 'react'; 
import { TouchableHighlight, StyleSheet, Image,View } from 'react-native'; 

const ResultRow = (props) => (
    <TouchableHighlight onPress={() => props.onPress()}> 
    <View> 
     <Text>My Row</Text>  
    </View> 
    </TouchableHighlight > 
); 

export default ResultRow; 

Если я выбираю строку из представления списка onPress событие называется. И функция onPressRow выполнена. от onPressRow function Я вызвал другую функцию, которая определена в том же классе с именем «updateDate». Я называю это this.updateDate(); Но получил undefined is not a function error.

Что я делаю неправильно?

Заранее спасибо.

+2

Привязать функцию или использовать функции стрелок! 'this.onPressRow = this.onPressRow.bind (this);' in constructor. – Li357

+0

@AndrewLi спасибо. теперь исправлено :) – bCliks

ответ

1

bind Функция this не относится к соответствующему контексту вашего кода. Вы можете использовать стрелки функции

onPressRow =() => { 
     try { 
      console.log("Selected!"); 

     //Some operation 

      this.updateDate(); 

     } catch (error) {  
      console.error(error); 
     } 
    } 

Другой способ связать вас функцию, чтобы установить привязки в конструкторе

constructor() { 
    super(); 
    this.onPressRow = this.onPressRow.bind(this); 
} 

На самом деле вам нужно bind любую функцию, которая будет использовать this, чтобы обратиться к context вашего класса реагирования.

+1

Ваш пример недействителен ECMAScript 6. Было бы полезно другим, если бы вы объяснили, что делать, чтобы получить эту (экспериментальную) функцию для работы. –

Смежные вопросы