s d*_*lop 1 javascript reactjs graphql graphql-subscriptions
我正在尝试使用API制作Apollo GraphQL并react在使用subscriptions-transport-ws库的GraphQL订阅的帮助下更新组件实时.对于删除操作,我收到TypeError: Cannot add/remove sealed array elements错误.这是来自试图从订阅更新数据的react组件的代码.
componentWillReceiveProps(nextProps) {
if (!this.subscription && !nextProps.data.loading) {
let { subscribeToMore } = this.props.data
this.subscription = [subscribeToMore(
{
document: postDeleted,
updateQuery: (previousResult, { subscriptionData }) => {
const delPost = subscriptionData.data.postDeleted;
const mainData = previousResult.Posts;
let post = mainData.find(post => post.id == delPost.id);
let updatedList = mainData.splice(post, 1);
return updatedList;
},
}
)]
}
}
Run Code Online (Sandbox Code Playgroud)
mainData很可能是" 密封 "的,因此您的splice操作会抛出错误:
let updatedList = mainData.splice(post, 1);
Run Code Online (Sandbox Code Playgroud)
解决方案是制作数组的副本(在这里使用数组解构):
let updatedList = [...mainData].splice(post, 1);
Run Code Online (Sandbox Code Playgroud)
你可以在Chrome控制台中试试这个:
a = [1, 2, 3];
Object.seal(a);
a.splice(1)
// Uncaught TypeError: Cannot add/remove sealed array elements
// at Array.splice (<anonymous>)
// at <anonymous>:1:3
[...a].splice(1)
// [2, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |