2017-12-08 52 views
1

反応するネイティブナビゲーション内のトップバーに状態を渡そうとしています。ここでコンポーネントの状態をnavigationOptionsに渡す方法ネイティブで反応する(反応ナビゲーション)

は私のコンポーネントがどのように見えるかです:

export default class Main extends Component { 
    constructor() { 
    super() 
    this.state = { 
     value: "" 
    }; 
    } 

    static navigationOptions = { 

    tabBarLabel:() => (
     <View style={styles.container}> 
     <Text style={styles.text}> 
{this.state.value} 
     </Text> 
     </View> 
    ), 
    }; 
} 

私はライン{} this.state.valueにエラーType Error: Cannot read property 'value' of undefinedを受け付けております。私は何か間違っているのですか?

答えて

0

ええ、これはreact-navigationという苦労ポイントの1つです。 staticキーワードは、このオブジェクトがクラスMainの一部であることを示しますが、クラスのインスタンスを実行する必要はありません。だから、あなたがそうのようにそれを呼び出すことができます:

Main.navigationOptions.tabBarLabel() 

これは、あなたがnavigationOptionsオブジェクトのプロパティとして宣言された関数からコンポーネントの状態を参照することができないことを意味します。コンポーネント内からタイトルやラベルを変更する必要がある場合は、navigation.setParams({ foo: ... })componentDidMountなどのライフサイクル機能から呼び出すことができます。

コンポーネントのマウント前に値が定義されていないと、ユーザーにやや遅いように見えるので、できるだけこの種の更新を避けるようにしています。

+0

コンポーネント内の状態変数を設定し、その代わりに静的関数に渡すと機能しますか? –

+0

私は正に、 'navigationOptions'関数を直接呼び出そうとしませんでした。 I は、 'react-navigation'がこれらの関数/値を内部的に使ってスクリーンプロパティを設定するので、うまくいくとは思わないでしょう。 –

+0

私は今このようなことをしています: '' 'static navigationOptions =({navigation})=> {{ tabBarLabel :()=>( <ビュースタイル= {styles.container}> <テキストスタイル= {スタイル.text}> {navigation.state.params.name} )、 })。 componentDidMount(){ navigation.setParams({name: "Heloo"}); } '' ' しかし、それは私に似たようなエラーを与えます。私はまだ私が間違っていることを理解できません。 –

関連する問題