簡體   English   中英

為嵌套模式 graphql/apollo/react 添加突變

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM