如果你想用
<Query>
组件,您必须创建一个容器类,用它包装当前类,并将数据作为子类的道具传递。举个例子。
export default class MyPageScreenContainer extends React.Component {
render() {
return (
<ApolloConsumer>
{(client) => (
<Query query={GET_USER} fetchPolicy="network-only">
{({data, loading, error, refetch}) => {
if (loading) {
return <Text>Loading...</Text>
}
return (
<Mutation mutation={PUT_REQUEST}>
{(putRequest) => {
return (
<MyPageScreen data={data.getUser} navigation={this.props.navigation}
refetchProfile={refetch}
putRequest={putRequest}
client={client}/>
)
}}
</Mutation>
)
}}
</Query>
)}
</ApolloConsumer>
)
}
}
当然,这种方法的问题在于,它与使用graphql HOC几乎相同。此外,当从容器中重新绘制数据时,必须使用相同的道具更新子组件中的状态,以确保重新渲染。