簡単なReact NativeアプリでApollo GraphQLを使っているだけで、できることに本当に感心しています。しかし、私はReduxストアとどのように統合されているかを頭に入れているわけではありません。基本的には、searchReducer
からのユーザ入力をGraphQLクエリに渡す必要があります。接続されたコンポーネントをGraphQLクエリに渡して変数を渡すことができると思ったが、prop
searchInput
が見つかりませんでした。ここでは、コードです:小道具をReduxストアからApollo GraphQLに渡す方法
import React, { Component } from 'react';
import { FlatList, Text, StyleSheet } from 'react-native';
import { connect } from 'react-redux';
import Repository from './Repository';
import { graphql } from 'react-apollo';
import gql from 'graphql-tag';
const query = gql`
query repositoryOwner($login: String!) {
repositoryOwner(login: $login) {
url,
avatarUrl(size: 100),
repositories(first: 5) {
nodes {
name,
description
}
}
}
}`;
class RepositoryList extends Component {
renderItem = ({ item }) => {
return <Repository name={item.name} description={item.description} />;
}
render() {
const { repositoryOwner } = this.props.data;
const data = repositoryOwner ? repositoryOwner.repositories.nodes : [];
return (
<FlatList data={data}
renderItem={(repo) => this.renderItem(repo)} keyExtractor={(item, index) => index} />
);
}
}
const mapStateToProps = (state) => {
return {
search: state.searchReducer
};
};
const withStore = connect(mapStateToProps)(RepositoryList);
export default graphql(query, {
options: ({ search: { searchInput }}) => ({ variables: { login: searchInput }})
})(withStore);
私はコンポーネントに反応connect
EDを渡すことによって、それがmapStateToProps
で指定されたsearch
prop
を見つけるだろうと思いました。しかし、それは与える:
TypeError: undefined is not an object (evaluating _ref3.search.searchInput).
それは明らかにそれが見つからないprop
。私の質問は、Apollo GraphQL接続コンポーネントの変数としてReduxストアのprops
を慣用的に使用する方法は何ですか?詳細に多くを行くと、他のユーザーのために有用である解答作成するには
まず、コンポーネントでgraphqlを使用して接続します。この方法では、小道具がクエリラッパーに注入されます。 – Herku
それはうまくいくようでした!助けてくれてありがとう。私の懸念事項は、Apolloの 'compose' API https://www.apollographql.com/docs/react/basics/setup.html#composeを使用しようとしていて、' props'を取っていないようです。 Keptはクラスを関数として呼び出せないという不満を持ちました。 'compose'を正しく使うことについて考えていますか? –