Reactjs/Apollo/AppSync Mutation Optimistic Response Resolved ID

Posted

技术标签:

【中文标题】Reactjs/Apollo/AppSync Mutation Optimistic Response Resolved ID【英文标题】: 【发布时间】:2018-07-09 18:57:09 【问题描述】:

所以首先我会说我对我的突变添加了一个乐观的响应,所以它会停止产生重复,如引用 here 和之前的 S.O. question.

这一切正常,但我有一组依赖突变在第一次使用 async await 之后运行。

  submitForm = async () => 
    // Only submit if form is complete
    if (!this.state.saveDisabled) 
      try 
        // Optimistic Response is necessary because of AWS AppSync
        // https://***.com/a/48349020/2111538
        const createGuestData = await this.props.createGuest(
          name: this.state.name,
        )
        let guestId = createGuestData.data.addGuest.id

        for (let person of this.state.people) 
          await this.props.createPerson(
            variables: 
              name: person.name,
              guestId,
            ,
            optimisticResponse: 
              addPerson: 
                id: -1, // A temporary id. The server decides the real id.
                name: person.name,
                guestId,
                __typename: 'Person',
              ,
            ,
          )
        

        this.setState(
          redirect: true,
        )
       catch (e) 
        console.log(e)
        alert('There was an error creating this guest')
      
     else 
      Alert('Please fill out guest form completely.')
    
  

现在它可以工作了,它使用与示例项目相同的突变模式

export default compose(
  graphql(CreateGuestMutation, 
    name: 'createGuest',
    options: 
      refetchQueries: [ query: AllGuest ],
    ,
    props: props => (
      createGuest: guest => 
        console.log(guest)
        return props.createGuest(
          variables: guest,
          optimisticResponse: () => (
            addGuest: 
              ...guest,
              id: uuid(),
              persons: [],
              __typename: 'Guest',
            ,
          ),
        )
      ,
    ),
  ),
  graphql(CreatePersonMutation, 
    name: 'createPerson',
  ),
)(CreateGuest)

唯一的问题是我无法强制将状态更新为使用异步等待时实际插入的 ID,因此所有人员条目都会获得占位符 UUID。请注意,我也尝试过使用 id: -1,就像对 createPerson 突变所做的那样,但这并没有改变任何东西,它只是对所有整体使用了负数。

有没有更好的方法来做到这一点?我做错了什么。这一切都在没有optimisticResponse 的情况下工作,但它总是为每个突变创建两个条目。

【问题讨论】:

【参考方案1】:

你能再试一次吗? AppSync SDK for javascript 的增强功能不再需要您使用乐观响应。如果您仍然想要一个乐观的 UI,您可以选择使用它。

此外,如果您的应用不需要离线,您现在还可以使用 disableOffline 来禁用离线功能,如下所示:

const client = new AWSAppSyncClient(
    url: AppSync.graphqlEndpoint,
    region: AppSync.region,
    auth: 
        type: AUTH_TYPE.API_KEY,
        apiKey: AppSync.apiKey,
    ,
    disableOffline: true
);

【讨论】:

以上是关于Reactjs/Apollo/AppSync Mutation Optimistic Response Resolved ID的主要内容,如果未能解决你的问题,请参考以下文章

MU-MIMO学习

sh 备用git repos,mu mu_repo

Lyapunov凸性定理

Luogu5348 密码解锁

[探究] $mu$函数的性质应用

Mertens