2017-03-09 59 views
1

我有這片組件的代碼如何爲我的組件啓動此功能(React Native)?

class List extends Component {  
    ... 

    render() { 
    ... 
    return 
    <TouchableHighlight onPress={()=>this.props.clearFilter()}> 
    </TouchableHighlight> 
    ... 
    } 
    ... 
    } 

父:

class Nav extends Component { 
    ... 
    // render implements renderscene for navigator 

    renderScene(route, navigator){ 
    ... 
    return (
    <List 
     navigator={navigator} 
     clearFilter={this.props.clearFilter} 
     ref={component => this._list = component}/> 
    ); 
    } 

和:

export default class App extends Component { 

applyfilter(){ 
//... 
} 

    constructor(props){ 
     ... 
     this.applyfilter = this.applyfilter.bind(this); 
    } 
    clearFilter(){ 
    this.setState(
     { 
     _filter:null, 
     _filterValue:"", 
     },()=>{this.applyFilter();} 
    ); 

    _renderScene = ({ route }) => { 
     return <Nav ref={component => this._nav = component} clearFilter={this.clearFilter.bind(this)}/>; 
... 

} 

所以我一起從應用程序傳遞clearFilter()功能NAV ,Nav將它傳遞給List。當List按鈕被按下時,我希望App的clearFilter()能夠觸發,但是由於某種原因它不會作爲函數計算。

每次按下按鈕,我都會得到undefined is not a function (evaluating '_this3.applyFilter()')

如何從列表按鈕中觸發clearFilter for App?

+0

看起來'clearFilter'被調用,並且在未定義的setState回調中它是'applyFilter'。你記得要綁定它嗎? – David

+0

對不起,忘了提及:this.applyfilter = this.applyfilter.bind(this);在App的構造函數中定義,編輯 – Ted

+0

applyFilter似乎沒有被定義... –

回答

1

只是一個錯字錯:您正在創建的功能applyfilter但你調用它作爲你的applyFilter功能clearFilter裏面。這就是爲什麼它拋出一個錯誤,它是undefined

+0

所以很尷尬......謝謝! – Ted

0

假設您在這裏沒有遺漏一些代碼,this.applyfilter似乎沒有在任何地方定義。

+0

applyFilter在App.js代碼中定義 – Ted

+0

你能更新代碼嗎?如果'applyFilter'被定義在應用程序的範圍之內,則必須移除'this'。 –

+0

對不起,更新... – Ted

0

你的代碼沒有清晰的格式。看起來像你已經在類之外聲明瞭applyFilter。在類中的構造函數之後定義它。

個人而言,我更喜歡使用clearFilter={()=> {this.clearFilter()}}代替clearFilter={this.clearFilter.bind(this)}

同爲applyFilter

class Button extends Components { 
 
    render(){ 
 
    return(
 
     <TouchableOpacity 
 
     onPress={()=>{ this.props.clearFilter() }} 
 
     > 
 
     </TouchableOpacity> 
 
    ); 
 
    } 
 
} 
 

 
class List extends Components { 
 
    render(){ 
 
    return(
 
     <Button 
 
     clearFilter={()=>{ this.props.clearFilter() }} 
 
     /> 
 
    ); 
 
    } 
 
} 
 

 
export default class Mainapp extends Components { 
 
    constructor(props){ 
 
    super(props); 
 
    this.state = {}; 
 
    } 
 

 
    clearFilter(){ 
 
    //// do something 
 
    this.applyFilter(); 
 
    } 
 

 
    applyFilter(){ 
 
    //// do something 
 
    } 
 

 
    render(){ 
 
    return(
 
     <View> 
 
     <List 
 
      clearFilter={()=>{ this.clearFilter() }} 
 
     /> 
 
     </View> 
 
    ); 
 
    } 
 
}

相關問題