Цель языков, фреймворков и библиотек — экономить время разработчика. Если библиотека X поможет вам завершить проект A раньше, вам, вероятно, следует использовать ее. Если библиотека B поможет вам написать более расширяемый код, который будет легче поддерживать в будущем, бегите как черти, потому что она вам не понадобится.

Теперь два фрагмента кода, пожалуйста. Давай, малыш, не стесняйся.

Posts.update({id}, {$inc: {votes: 1}})
// A mutation is made available on a callback called `mutate`
// Other props of the wrapping component are passed through.
function PostUpvoter({ mutate, postId }) {
  return (
    <button onClick={() => mutate({ variables: { postId }})}>
      Upvote
    </button>
  )
}

// You can also use `graphql` for GraphQL mutations
export default graphql(gql`
  mutation upvotePost($postId: Int!) {
    upvotePost(postId: $postId) {
      id
      votes
    }
  }
`)(PostUpvoter);