Cas*_*ams 8 javascript apollo reactjs graphql react-apollo
我有一组突变触发某些类型的弹出窗口的本地状态.它们通常设置如下:
openDialog: (_, variables, { cache }) => {
const data = {
popups: {
...popups,
dialog: {
id: 'dialog',
__typename: 'Dialog',
type: variables.type
}
}
};
cache.writeData({
data: data
});
return null;
}
Run Code Online (Sandbox Code Playgroud)
我传入的默认值如下:
const defaults = {
popups: {
__typename: TYPENAMES.POPUPS,
id,
message: null,
modal: null,
menu: null,
dialog: null
}
};
Run Code Online (Sandbox Code Playgroud)
它们在我的React代码中的使用方式是使用Mutation包装器组件,如下所示:
const OPEN_ALERT_FORM = gql`
mutation AlertOpenDialog($type: String!) {
openDialog(type: $type) @client
}
`;
class Alert extends Component {
render() {
return (
<Mutation mutation={OPEN_ALERT_FORM} variables={{ type: ALERT_FORM }}>
{openDialog => {
return (
<Button
classes="alert-button"
onClick={openDialog}
label="Trigger Alert"
/>
);
}}
</Mutation>
);
}
}
Run Code Online (Sandbox Code Playgroud)
对于我的各种弹出窗口(我有3或4个不同的,像menu
和modal
),打开和关闭它们的突变看起来都一样,只是不同的类型名和内容等.但是,对于Dialogs,当我点击它们时出现这个错误:
网络错误:为查询字段对话框返回的Dialog类型对象缺少选择集
...然后触发组件从页面中消失.另外,一旦发生这种情况,当您尝试单击它们时,所有其他弹出窗口类型都会消失,并重新抛出该错误,或者说:
未捕获错误:抛出了跨源错误.React无法访问开发中的实际错误对象.
我已经尝试重写对话框以匹配其他弹出窗口类型,并重新编写组件,但我仍然收到此错误.它看起来似乎是对话+阿波罗特定的.什么可能是这个问题的根源?它不能成为后端的东西,因为这只涉及当地的阿波罗.我以前没见过这个错误,我不知道从哪里开始.
有同样的问题错误消息.似乎这是到目前为止stackoverflow中唯一的问题,在问题中使用相同的错误消息.
我会记下我的一面
在我的例子中,我有一个查询不查询对象的字段.对这种情况很厌倦,我看起来像这样的查询
{
popups @client {
id
dialog
}
}
Run Code Online (Sandbox Code Playgroud)
它应该是
{
popups @client {
id
dialog {
id
}
}
}
Run Code Online (Sandbox Code Playgroud)
事实证明,通过将该dialog
字段视为字符串而不是对象,可以解决此问题。将函数更改为这个就可以了,并且错误消失了:
openDialog: (_, variables, { cache }) => {
const data = {
popups: {
...popups,
dialog: variables.type
}
};
cache.writeData({
data: data
});
return null;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2983 次 |
最近记录: |