TypeError:试图分配给只读属性。在 Expo / GraphQL Apollo 客户端上

Posted

技术标签:

【中文标题】TypeError:试图分配给只读属性。在 Expo / GraphQL Apollo 客户端上【英文标题】:TypeError: Attempted to assign to readonly property. On Expo / GraphQL Apollo client 【发布时间】:2020-08-06 09:06:45 【问题描述】:

我遇到了 TypeError: Attempted to assign to readonly 属性。这是在带有 Apollo 客户端的 Expo / React Native 上。

我有以下 GraphQL 查询

const GET_VIDEOS = gql`
    
      users(limit: 3) 
        userVideos 
          muxPlaybackId
          videoQuestion 
            questionText
          
        
      
    
    `; 

我创建了以下组件:

export const VideoData = (ref) => 
    const  data, error, loading  = useQuery(GET_VIDEOS); 

    if (loading) return null;
    if (error) return `Error!: $error`;

    console.log(data);

    return (<Video
            ref=ref
            source= uri: data.users[0].userVideos[0].muxPlaybackId
            rate=1.0
            volume=1.0
            isMuted=false
            resizeMode="cover"
            usePoster=true
            shouldPlay
            isLooping
            style= width: '100%', height: '100%'
        >
        </Video>
    );

问题似乎来自以下行:

source= uri: data.users[0].userVideos[0].muxPlaybackId

但是我还能如何访问这个 muxPlaybackId 字符串呢?这是我需要的视频源的唯一值。

为了完整起见,这是我的 GraphQL 结果:


  "data": 
    "users": [
      
        "userVideos": [
          
            "muxPlaybackId": "e6ZNh139bm2Poz5xoPl4V4016fnRCPWcZbkrTxg3Ocys",
            "videoQuestion": 
              "questionText": "What do you miss most about normal life?"
            
          ,
          
            "muxPlaybackId": "DeygMKplfbg4Ye6PtCiFDgMFI01AEBp1tnfoVD9k401Ws",
            "videoQuestion": 
              "questionText": "What is your favorite color?"
            
          
        ]
      ,
      
        "userVideos": []
      ,
      
        "userVideos": []
      
    ]
  

【问题讨论】:

【参考方案1】:

我认为该问题与您访问muxPlaybackId 的方式无关。运行时似乎在抱怨 assigning 东西,而不是 accessing

不过,可以肯定的是,不要使用表达式来访问muxPlaybackId,而是尝试对其进行硬编码,看看是否有同样的问题:

source= uri: "e6ZNh139bm2Poz5xoPl4V4016fnRCPWcZbkrTxg3Ocys" 

如果这仍然产生错误,那么我会查看Video 组件并查看允许设置哪些属性。

【讨论】:

以上是关于TypeError:试图分配给只读属性。在 Expo / GraphQL Apollo 客户端上的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法分配给只读属性 - Karma

套接字 IO 客户端 + React Typescript + 上下文 API 导致 TypeError:无法分配给对象“#<Object>”的只读属性“exports”

来自 apollo-boost 的 ApolloClient 试图分配给只读属性

排序对象数组时出错无法分配给对象'[object Array]'的只读属性'2'

无法分配给对象的只读属性

ERROR TypeError:“无法在”signUpForm“上分配给属性”validator“:不是对象”