2017-10-19 17 views
0

我想setStateA組件到B組件。 AB是不同的JS文件。我試圖導入BA並訪問B中的功能。還有使B中的函數靜態化,然後只查找靜態函數沒有實例,所以我無法在靜態中訪問thisReact Native - 不同JS文件之間的setState

A.js

import B from '../B'; 
class A extends React.Component { 
    ChangeBContent(){ 
     B.SetContent(); 
    } 

    render(){ 
     return(
      <View> 
       <SpeicalBtn onPress={()=> this.ChangeBContent()}/> 
      </View> 
     ); 
    } 
} 

module.exports = A; 
AppRegistry.registerComponent('myApp',() => A); 

B.js

class B extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      content:'' 
     } 
    } 

    SetContent(){ 
     this.setState({content:'123'}); 
    } 

    render(){ 
     return(
      <View> 
       <Text>{this.state.content}</Text> 
      </View> 
     ); 
    } 
} 

module.exports = B; 
AppRegistry.registerComponent('myApp',() => B); 
+0

你正在嘗試調用一個靜態方法B.SetContent();而應該找到一種方法來獲取'B'的實例並通過實例調用該方法。 – Panther

回答

1

你應該將它們包裝到另一個容器組件。

ContentC.js

class ContentC extends React.Component { 
     constructor(props) { 
     super(props); 
     this.state = { 
      contentA:'', 
      contentB: '' 
     } 
    } 
    SetContentA(){ 
     this.setState({contentA:'123'}); 
    } 
    SetContentB(){ 
     this.setState({contentB:'123'}); 
    } 
    render(){ 
     return(
     <ClassA content={this.state.contentA} /> 
      <ClassB content={this.state.contentB}/> 
     ); 
     } 
    } 

現在你可以使用的內容,props.contentAprops.contentB

3

你可以做骯髒的把戲,但我認爲你需要更多更清潔的方式。

這是你要使用狀態管理庫的地方,例如redux你有一個全局存儲,並且你發送操作。你可以看看這個stackoverflow post

+0

我可以參考的任何例子?在Redux中,我非常新並且不熟悉,只是閱讀了一些redux文檔,感覺混亂。 –

+0

你是如何開始使用反應的?從初學者工具包入門更好,因爲您不必首先自行配置所有內容。 您可以轉到我發​​布的鏈接,如果遇到困難,請再次發表評論,然後我會逐步向您展示如何配置。 –

+0

我從反應導航 –