[英]Add mutation for nested schema graphql/apollo/react
我不能在我的應用程序中添加 object,這是基於一些教程的(但是我可以使用 graphql 操場來完成)。 這是我的架構並在 AddLaunch 組件中使用突變。
const ADD_LAUNCH = gql`
mutation($flight_number: Int!,
$mission_name: String!,
$launch_year: String!,
$launch_success: Boolean!,
$rocket: addRocket!) {
addLaunch(flight_number: $flight_number,
mission_name: $mission_name,
launch_year: $launch_year,
launch_success: $launch_success,
rocket:{
rocket_id: $rocket_id,
rocket_name: $rocket_name,
rocket_type: $rocket_type
}
) {
flight_number
mission_name
launch_year
launch_success
rocket{
rocket_id
rocket_name
rocket_type
}
}
}
`;
...
const [newLaunch, setNewLaunch] = useState({
flight_number:'',
mission_name: '',
launch_year: '',
launch_success: null,
rocket_id:'',
rocket_name:'',
rocket_type:''
});
const [addLaunch] = useMutation(ADD_LAUNCH);
...
const onSubmit = async e => {
e.preventDefault();
await addLaunch({ variables: {
flight_number: newLaunch.flight_number,
mission_name: newLaunch.mission_name,
launch_year: newLaunch.launch_year,
launch_success: newLaunch.launch_success,
rocket:{
rocket_id: newLaunch.rocket_id,
rocket_name: newLaunch.rocket_name,
rocket_type: newLaunch.rocket_type
}
}
});
refetchLaunches()
}
我的 typeDefs:
const typeDefs = gql`
type Rocket {
rocket_id: String
rocket_name: String
rocket_type: String
},
type Launch {
_id: ID,
flight_number: Int,
mission_name: String,
launch_year: String,
launch_date_local: String,
launch_success: Boolean,
rocket: Rocket
},
type Query {
launches: [Launch]
launch(flight_number:Int!): Launch
}
input addRocket {
rocket_id: String!
rocket_name: String!
rocket_type: String!
}
type Mutation {
addLaunch(flight_number: Int!,
mission_name: String!,
launch_year: String!,
launch_success: Boolean!,
rocket: addRocket!
): Launch
`
解析器(一個突變):
addLaunch: (parent, launch) => {
// Create a new record in the database
const newLaunch = new Launch({
flight_number: launch.flight_number,
mission_name: launch.mission_name,
launch_year: launch.launch_year,
launch_success: launch.launch_success,
rocket: launch.rocket
});
// Save the record and return it
return newLaunch.save();
}
我嘗試了很多方法,但我無法從錯誤(錯誤請求 400)中獲取任何具體信息。
好吧,這比我想的更簡單。 問題是我忘記將 flight_number 輸入值從字符串解析為 int。 突變比我想象的還要簡單。
const ADD_LAUNCH = gql`
mutation($flight_number: Int!,
$mission_name: String!,
$launch_year: String!,
$launch_success: Boolean!,
$rocket: addRocket!) {
addLaunch(flight_number: $flight_number,
mission_name: $mission_name,
launch_year: $launch_year,
launch_success: $launch_success,
rocket: $rocket
) {
flight_number
mission_name
launch_year
launch_success
}
}
`;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.