javascript - Apollo Query 组件如何使用它的自身值作为回调

标签 javascript reactjs apollo react-apollo

我正在读 Apollo documentation然后我看到了下面的代码。 看起来来自 Query 组件本身的加载、错误和数据可以传递给 props.children 接受函数。我如何实现这样一个简单的组件,它可以获取自己的值并将其传递给其子组件?

import gql from "graphql-tag";
import { Query } from "react-apollo";

const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;

const Dogs = ({ onDogSelected }) => (
  <Query query={GET_DOGS}>
    {({ loading, error, data }) => {
      if (loading) return "Loading...";
      if (error) return `Error! ${error.message}`;

      return (
        <select name="dog" onChange={onDogSelected}>
          {data.dogs.map(dog => (
            <option key={dog.id} value={dog.breed}>
              {dog.breed}
            </option>
          ))}
        </select>
      );
    }}
  </Query>
);

我尝试过什么: 1) 使用发送数据的函数覆盖 props.children 。 (我猜 apollo 查询组件使用了这种方法,因为根据它的 source code 。 2)克隆 child 然后发送数据,这对我来说不成功。

最佳答案

允许子级成为函数是 React 中的常见模式。连新Context API使用这种模式。

如果你看source code of the react-apollo Query component您可以看到它只是将 this.props.children 作为函数调用。

render() {
  const { children } = this.props;
  const queryResult = this.getQueryResult();
  return children(queryResult);
}

有关 Function as Children 模式的更深入说明,请查看 React documentation关于渲染 Prop 。

关于javascript - Apollo Query 组件如何使用它的自身值作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745102/

相关文章:

caching - Apollo Client 中的查询是否应该在发出网络请求之前查找不同查询缓存的结果?

JavaScript 返回文本 + 播放声音

javascript - 改变所有的游标?

javascript - 有没有办法从我的父组件中内置的菜单导航到不同的屏幕?

reactjs - 不能在测试中设置属性

graphql - ApolloBoost 被初始化为不支持的选项 :

javascript - 为什么 sort() 函数会更改此数组中的数字值?

React Native 中的 CSS 三 Angular 形不再起作用

javascript - 将 transitionend 事件监听器与 react 一起使用以创建过渡

GraphQL 突变为嵌套响应返回 null