2017-10-22 5 views
1

リアクションネイティブアプリでリアクションナビゲーションを使用していますが、ユーザーがアプリケーションの右上にある[保存]ボタンをクリックしたときにonSavePress()関数を呼び出す必要があります。反応ナビゲーションでthis.propsにアクセスするには?

しかし、私はonSavePress関数を呼び出すときに、アプリケーションがクラッシュする、それ以外の言葉では静的なnavigationOptions関数の中からその関数を呼び出すようなことはありません。

がここに以下のコードです:だから

class TheFormScreen extends Component { 

    constructor(props) 
    { 
    super(props); 
    this.state = { 
     visible: true 
     }; 
    } 

    state = { 
     isReady: false, 
    }; 


static navigationOptions = ({ navigation }) => ({ 
    title: `${navigation.state.params.item.a1}`, 
    tabBarIcon: ({ tintColor }) => { 
      return <Icon name="phone" size={30} color={tintColor} />; 
    }, 
    headerRight: (
     <Btn 
     title='Done-' 
     onPress={() => { console.log(' on Press done on line 73 Form--Screen this.props=', this.props); navigation.goBack() } 
     } 
     /> 
    ), 
    }); 

onDecline(){ 
    // console.log(' onDecline clicked'); 
    this.setState ({ showModal : false }); 
} 



} 
onDeleteProperty() { 
    // console.log(' onDelete clicked'); 

} 


onSavePress(){ 
    this.onClickToaster(); 
    console.log('101 - on click onSavePress '); 
    const { a1, a2 } = this.props; 

    this.props.propertySave({ a1, a2 }); 
} 
+0

あなたは静的ブロックでこれを行うことはできません。静的キーワードについて読んで理解してください。また、あなたの質問に答えるために、https://github.com/react-community/react-navigation/issues/145を見てください。 – vonovak

答えて

0

、これはすべてのコード広告infoSaveがあまりにも何もどこで、onSavePressされていないだけの明確なスニペットです。

あなたの問題は、this.propsが定義されていないか、そのようなものであると仮定しています。そのような場合は、矢印の関数に機能を変更し、これをバインドすることができます。

onSavePress =() => { 
    this.onClickToaster('Saving the info....', 'top' , DURATION.LENGTH_LONG, true); 
    const { a1, a2 } = this.props; 
    this.props.infoSave({ a1, a2 }); 
} 

は編集:

あなたはこのことを意味ですか?

headerRight: (
    <Btn 
    title='Save' 
    onPress={() => { this.onSavePress(); navigation.goBack() } 
    } 
    /> 
), 
+0

したがって、反応ナビゲーションの右上にある関数onSavePressの呼び出し方法に関する質問? –

+0

私の編集を参照してください。あなたが明らかに疑問の余地のない多くのコードを想定しているので、非常に混乱しますが。これらのコードはすべて同じクラスに入っていますか?同じファイルですか?なぜ機能していないのですか? more infoを追加すると助けが簡単になります – sfratini

+0

はいこれはすべて同じクラスにあります。 –

関連する問題