Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Apollo graphql客户端状态检索值_Javascript_Reactjs_Graphql_Apollo_React Apollo - Fatal编程技术网

Javascript 如何从Apollo graphql客户端状态检索值

Javascript 如何从Apollo graphql客户端状态检索值,javascript,reactjs,graphql,apollo,react-apollo,Javascript,Reactjs,Graphql,Apollo,React Apollo,通过查看,我可以看到如何使用变异或直接使用cache.writeData({data})将值写入/更新到本地存储/缓存 但是,我如何直接检索缓存的值以用作变异的变量呢?或者我需要在第一个查询中使用@client进行链2查询吗 注意:如果我使用Apollo Provider,我可以访问缓存,但它看起来是这样的:{cache.cache.data.$ROOT.data.myVariable}您可以将突变组件嵌套在查询组件中。如下图所示。如果您经常这样做,那么您可以创建自己的包装器组件 或者您可以执行

通过查看,我可以看到如何使用变异或直接使用
cache.writeData({data})
将值写入/更新到本地存储/缓存

但是,我如何直接检索缓存的值以用作变异的变量呢?或者我需要在第一个查询中使用@client进行链2查询吗


注意:如果我使用Apollo Provider,我可以访问缓存,但它看起来是这样的:
{cache.cache.data.$ROOT.data.myVariable}

您可以将突变组件嵌套在查询组件中。如下图所示。如果您经常这样做,那么您可以创建自己的包装器组件

或者您可以执行
客户端。readQuery
,如此处的文档所示:

const ADD\u TODO=gql`
突变addTodo($type:String!){
addTodo(类型:$type){
身份证件
类型
}
}
`;
{({data:{myVariable}}})=>{
返回(
{(addTodo,{data})=>(
{
e、 预防默认值();
addTodo({variables:{type:myVariable}});
input.value=“”;
}}
>
{
输入=节点;
}}
/>
添加待办事项
)}

谢谢Casey,我认为这是最好的主意。请注意,我发现我几乎没有使用@client,因为我需要的所有东西都在缓存中,可以使用缓存优先或仅缓存的fetchPolicy调用
const ADD_TODO = gql`
  mutation addTodo($type: String!) {
    addTodo(type: $type) {
      id
      type
    }
  }
`;

<Query query={gql`
  {
    myVariable @client
  }
`>
 {({ data: { myVariable }}) => {

  return (
    <Mutation mutation={ADD_TODO}>
      {(addTodo, { data }) => (
        <div>
          <form
            onSubmit={e => {
              e.preventDefault();
              addTodo({ variables: { type: myVariable } });
              input.value = "";
            }}
          >
            <input
              ref={node => {
                input = node;
              }}
            />
            <button type="submit">Add Todo</button>
          </form>
        </div>
      )}
    </Mutation>
</Query>