2017-03-06 37 views
1

アイテム(ジョブ)のリストがあり、アイテム(ジョブ)が選択されているときに新しいシーンが開かれています。選択した項目のIDを、リスト付きのシーンから、Reduxを使用せずに選択した項目(ジョブ)に関する詳細を含む他のシーンに渡したい。ネイティブルータフラックスに反応する:シーン間でパラメータを渡す

ルータ

import React from 'react'; 
import { Scene, Router } from 'react-native-router-flux'; 
import JobsList from './components/JobsList'; 
import Job from './components/Job'; 

const RouterComponent =() => { 
    return (
    <Router> 
     <Scene key="jobs" component={JobsList} initial /> 
     <Scene key="Job" component={Job} title="Test" /> 
    </Router> 
); 
}; 
export default RouterComponent; 

ジョブリスト

import React, { Component } from 'react'; 

export default class JobsList extends Component { 
    render() { 
    return (
     <TouchableOpacity onPress={() => { Actions.Job({ jobId: jobId }) }}> 
     ... 
     </TouchableOpacity> 
    ); 
    } 
} 

仕事

import React, { Component } from 'react'; 
export default class Job extends Component { 
    constructor() { 
    super(); 

    this.state = { 
     job: {} 
    }; 

    axios.get(
     // PROBLEM: this.props.jobId is empty 
     `http://api.tidyme.dev:5000/${this.props.jobId}.json`, 
     { 
     headers: { Authorization: 'Token token=123' } 
     } 
    ).then(response => this.setState({ 
     job: response.data 
    })); 
    } 

    render() { 
    return (
     <Text>{this.state.job.customer.firstName}</Text> 
    ); 
    } 
} 

答えて

4

あなたは、コンストラクタ内this.propsにアクセスしたい場合は、super(props)を呼び出す必要があります。

constructor(props) { 
    super(props); 
    console.log(this.props); 
} 
+0

感謝を。このベストプラクティスですか、あるいはこれを処理するためにReduxを設定する必要がありますか? – migu

+0

小道具が多くのシーンで使用されている場合は、reduxが優れています。さもなければ、上記は十分に良いはずです。 – vinayr

0

のベストプラクティスは、純粋な機能としてコンポーネントを定義している:

const Job = ({ job, JobId}) => { 
return (
    <Text>{job.customer.firstName}</Text> 
); 
} 

otherFunctions() { 
    ... 
} 
関連する問題