graphql - 使用 Sapper 刷新预加载数据

标签 graphql svelte sapper

我目前正在学习 Sapper 并将其与 GraphQL 服务集成。

为了从一个简单的地方开始,我制作了一个常见问题解答页面,其中包含一个简单的问题/答案列表以及一个创建表单。

<script context="module">
  import graphql from '../graphql';
  import gql from 'graphql-tag';

  export function preload({ params, query }) {
    const graphQuery = gql`
      {
        faqEntries {
          question,
          answer
        }
      }
    `;

    return graphql.request(graphQuery).then((data) =>  data);
  }
</script>

<script>
  import title from './title';
  import Input from '../components/form/Input';
  import Button from '../components/Button';

  export let faqEntries;

  const newEntry = {
    question: '',
    answer: '',
  };

  const addEntry = () => {
    console.log(newEntry);
    graphql.request(gql`
      mutation {
        createFaqEntry(
          question: "${newEntry.question}"
          answer: "${newEntry.answer}"
        ) {
          id
          question
          answer
        }
      }
    `).then((data) => {
      console.log(data);
      newEntry.question = '';
      newEntry.answer = '';
    })
  }
</script>

<svelte:head>
  <title>{title('Foire aux questions')}</title>
</svelte:head>

<section class="container">
  <h1>Foire aux questions</h1>

  <form on:submit|preventDefault>
    <Input id="question" label="Question" bind:value={newEntry.question} />
    <Input id="answer" label="Réponse" bind:value={newEntry.answer} />
    <Button on:click={addEntry} >Ajouter une entrée</Button>
  </form>

  {#each faqEntries as faqEntry}
    <div class="py-4">
      <h4>{faqEntry.question}</h4>
      <p>
        {faqEntry.answer}
      </p>
    </div>
  {/each}
</section>

当前脚本运行良好,允许我直接从编码表单添加 FAQ 条目。

现在,我想在提交新条目时刷新 FAQ 条目列表。

执行此操作的最佳做​​法是什么?另外,我的 GraphQL 实现是否以正确的方式完成?

最佳答案

您可以重用预加载函数来刷新数据:

  .then((data) => {
    console.log(data);
    newEntry.question = '';
    newEntry.answer = '';

    preload().then(props => {
      faqEntries = props.faqEntries
    })

当您想要显示其他用户以进行额外的 api 调用为代价添加的条目时,该方法很有用。

但是如果你只想添加最近添加的条目:

  .then((data) => {
     faqEntries = [...faqEntries, {...newEntry}]

关于graphql - 使用 Sapper 刷新预加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673525/

相关文章:

ruby-on-rails - 允许 eq 比较中的数组内容是 rspec 测试中的任何内容

javascript - NextJS - 在 getStaticProps 中获取动态变量

svelte - 如何在 Sveltekit 独立端点上启用 CORS?

javascript - 错误 : {#each} only iterates over array-like objects. - Javascript 和 Svelte

webpack - 工兵 webpack 警告 : 'mode' option has not been set

javascript - 在 GraphQL 查询模板中使用 React Prop (字符串)

javascript - 无法使用 Apollo 和 GraphQL 访问从 refetchQueries 返回的数据

javascript - sveltejs 中的响应式全宽 Canvas

javascript - 通过单击按钮保存项目变量

javascript - Svelte/Sapper - 运行 __sapper__/build 找不到模块