在我发送删除突变后,我无法让 React+Apollo 更新商店。我正在使用内置 apollo+react 和 express graphQL 服务器的 reactQL 样板(我没有安装 apollo 服务器 - 我只是使用参考 express-graphQL 包)。我的数据存储在 mongoDB 中_id
,但客户端的实际数据id
用作 id。
apollo 客户端定义如下:
new ApolloClient(
Object.assign(
{
reduxRootSelector: state => state.apollo,
dataIdFromObject: o => o.id
},
opt
)
);
我有一个父组件,它使用来自 'src/graphql/queries/courses.gql 的导入课程
@graphql(courses)
export default class CoursesPage extends Component {
constructor(props){
super(props)
this.handleDelete = this.handleDelete.bind(this);
}
handleDelete(event) {
this.props.mutate({ variables: {id: selectedId}}
.catch(err => console.log(err))
}
render() {
return (
{ this.props.data.courses.map(course =>
<CourseDelete selectedId={course.id} key={course.id} />
})
}
)
}
}
和一个看起来像这样的子组件:
import deleteCoursefrom 'src/graphql/mutations/deleteCourse.gql
@graphql(deleteCourse)
export default class CourseDelete extends Component {
constructor(props){
super(props)
this.handleDelete = this.handleDelete.bind(this);
}
handleDelete(event) {
this.props.mutate({ variables: {id: this.props.selectedId}}
.catch(err => console.log(err))
}
render() {
return (
<button onClick={this.handleDelete}>Button</button>
)
}
}
其中 deleteCourse.gql:
mutation deleteCourse($id: String!) {
deleteCourse(id: $id) {
id
}
}
我的原始查询在 course.gql 中:
query courses {
courses {
id
}
}