react-native
アプリで問題が発生しました。画面間でデータを渡す方法がわかりません。
SOで回答されている他の同様の質問があることはわかっていますが、解決策がうまくいきませんでした。
StackNavigator
を使用しています。これが私のApp.js
ファイルの設定です。
export default SimpleApp = StackNavigator({
Home: { screen: HomeScreen },
Categories: { screen: CategoriesScreen }, // send from here
Category: { screen: CategoryScreen } // to here
});
目的の画面に移動するTouchableHighlight
イベントを持つonPress
コンポーネントがあります。これは私のCategories.js
ファイル/画面にあります。
<TouchableHighlight onPress={(id) => {
const { navigate } = this.props.navigation;
navigate('Category', { category: id });
}}>
<Text>{name}</Text>
</TouchableHighlight>
要素をクリックすると、画面は確かにcategory
に切り替わりますが、props
データを送信できません。
Category
画面でデータを確認すると、未定義が返されます。私は次の方法を試しました:
this.props.category
this.props.navigation.state.category;
this.props.navigation.state.params.category
navigate
メソッドで渡したデータにどのように正確にアクセスできますか?
navigate('Category', { category: id });
編集:これが私の実際のコード構造です:
data
はAPI
に由来します。
for (var i = 0; i < data.length; i++) {
var name = data[i].name;
var id = data[i].id;
categoryComponents.Push(
<Card key={id}>
<CardItem>
<Body>
<TouchableHighlight onPress={(id) => {
const { navigate } = this.props.navigation;
navigate('Category', { params: { category: id } });
}}>
<Text>{name + " " + id}</Text>
</TouchableHighlight>
</Body>
</CardItem>
</Card>
);
}
あなたの問題はパラメータを送信していないことです。あなたはそれを正しく送り、正しく読んでいます。エラーは、id
が定義されていないことに関連しています。
以下のようにコードを修正する必要があります、
for (var i = 0; i < data.length; i++) {
var name = data[i].name;
var id = data[i].id;
categoryComponents.Push(
<Card key={id}>
<CardItem>
<Body>
<TouchableHighlight onPress={(event) => {
// onPress event fires with an event object
const { navigate } = this.props.navigation;
navigate('Category', { category: id });
}}>
<Text>{name + " " + id}</Text>
</TouchableHighlight>
</Body>
</CardItem>
</Card>
);
}
そして、あなたは以下のようにあなたのパラメータを読むことができます。
this.props.navigation.state.params.category
したがって、上記の問題を見ると、screenProps
(文書化された here )のようなものを探していると思います。
これにより、特定の小道具を画面間で渡すことができます。
これがお役に立てば幸いです。他に必要な場合はお知らせください。
次のコードスニペットを使用すると、いくつかの値を含む別の画面に移動できます。
navigate({ Home: 'HomeScreen', params: { username: 'abcd' } })
そして、あなたはHomeScreenでパラメータを収集することができます、
this.props.navigation.state.params.username
親画面から:
navigate({ routeName: 'Category', params: { category: id } })
または
navigate('Category', { category: id })
子画面から:
const category = this.props.navigation.state.params.category