Par*_*ler 2 graphql react-native react-apollo apollo-client
我刚刚在一个简单的React Native应用程序上使用Apollo GraphQL,它对它的功能印象非常深刻.但我并没有完全了解它如何与Redux商店集成.从本质上讲,我需要将一些用户输入传递searchReducer给我的GraphQL查询.我以为我可以简单地将连接的组件传递给我的GraphQL查询并提供变量,但它没有找到prop searchInput.这是代码:
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);
Run Code Online (Sandbox Code Playgroud)
我认为通过传递connected React组件,它会找到search prop指定的mapStateToProps.但是,它给出了:
TypeError:undefined不是对象(评估_ref3.search.searchInput).
显然,它没有找到prop.我的问题是,props在Apollo GraphQL连接组件中使用Redux商店作为变量的惯用方法是什么?
要创建更详细的答案,并对其他用户有用:
要使用redux connect高阶组件中的props,请确保最后应用该函数.这可以在你的例子中完成
const WithGraphql = graphql(/* ... */)(RepositoryList);
export default connect(mapStateToProps)(WithGraphql);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用compose从终极版或反应-阿波罗.Compose应用从last到first的函数.对于两个参数,compose可以写成如下:
compose = (f, g) => (...args) => f(g(...args))
Run Code Online (Sandbox Code Playgroud)
确保首先列出连接,然后列出graphql.这将创建一个新函数,然后您必须将其应用于组件RepositoryList:
export default compose(
connect(mapStateToProps),
graphql(/* ... */),
)(RepositoryList);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |