首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将变量直接注入到从React-Apollo <突变/>组件传递的函数中,而不是作为道具

在React-Apollo中,突变(Mutation)组件用于执行GraphQL突变操作。通常情况下,我们将变量作为道具(props)传递给突变组件,然后在组件内部使用这些变量。

然而,有时候我们希望将变量直接注入到从React-Apollo突变组件传递的函数中,而不是作为道具。这可以通过使用高阶组件(Higher-Order Component,HOC)来实现。

下面是一个示例代码,演示了如何将变量直接注入到突变组件传递的函数中:

代码语言:txt
复制
import { graphql } from 'react-apollo';
import { gql } from 'apollo-boost';

// 定义GraphQL突变操作
const mutation = gql`
  mutation UpdateUser($id: ID!, $name: String!) {
    updateUser(id: $id, name: $name) {
      id
      name
    }
  }
`;

// 创建高阶组件
const withMutation = graphql(mutation, {
  name: 'updateUserMutation',
});

// 定义一个React组件
const MyComponent = ({ updateUserMutation }) => {
  const handleUpdateUser = async (id, name) => {
    try {
      // 直接调用注入的突变函数
      const response = await updateUserMutation({
        variables: { id, name },
      });
      console.log(response.data.updateUser);
    } catch (error) {
      console.error(error);
    }
  };

  return (
    <div>
      <button onClick={() => handleUpdateUser('123', 'John')}>
        Update User
      </button>
    </div>
  );
};

// 使用高阶组件包装React组件
const MyComponentWithMutation = withMutation(MyComponent);

export default MyComponentWithMutation;

在上面的代码中,我们首先定义了一个GraphQL突变操作(mutation)。然后,我们使用graphql函数创建了一个高阶组件,并将突变操作作为参数传递给它。通过name属性,我们为注入的突变函数指定了一个名称(updateUserMutation)。

接下来,我们定义了一个React组件MyComponent,它接收updateUserMutation作为道具。在handleUpdateUser函数中,我们直接调用了注入的突变函数updateUserMutation,并传递了变量idname

最后,我们使用高阶组件withMutation包装了MyComponent,并导出了包装后的组件MyComponentWithMutation

这样,我们就可以在React组件中直接注入变量到突变函数中,而不需要将变量作为道具传递。这种方式可以简化代码,并提高开发效率。

推荐的腾讯云相关产品:腾讯云函数(Serverless Cloud Function),详情请参考腾讯云函数产品介绍。腾讯云函数是一种事件驱动的无服务器计算服务,可以帮助开发者更轻松地构建和运行云端应用程序。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Vue组件数据通信方案总结

背景 初识Vue.js,了解到组件是Vue的主要构成部分,但组件内部的作用域是相对独立的部分,组件之间的关系一般如下图: 组件A与组件B,C之间是父子组件,组件B,C之间是兄弟组件,而组件A,D之间是隔代的关系...一,道具/ $ emit 1,Prop是你可以在组件上注册的一些自定义特性。当一个值传递给一个Prop特性的时候,它就变成了那个组件实例的一个属性。...,而动作也不能直接操作数据,还需要通过Mutation来修改State中数据,最后根据State中数据的变化,来渲染页面。...简单来说,$ attrs里存放的是父组件中绑定的非道具属性,$ listeners里面存放的是父组件中绑定的非原生事件。...所以,如果采用的是我代码中注释的方式,父级的名称如果改变了,子组件this.name是不会改变的,而当采用代码中插入一个监听对象,修改对象中属性值,是可以监听到修改的。

1.7K50
  • vue3.0 Composition API 翻译版(超长)

    指向组件实例而不是methods对象的点下方的内部函数)。...当state.count在将来的某个时间发生突变时,内部函数将再次执行。 这是Vue反应系统的本质。当您从data()组件中返回对象时,它会在内部使之具有反应性reactive()。...这是因为JavaScript基本类型是通过值而不是通过引用传递的 ? 将值分配给对象作为属性时,也会发生相同的问题。如果一个反应性值在分配为属性或从函数返回时不能保持其反应性,那么它将不是很有用。...#缺点 #介绍引用的开销 从技术上讲,Ref是此提案中引入的唯一“新”概念。引入它是为了将反应性值作为变量传递,而无需依赖对的访问this。... velte代码看起来更简洁,因为它在编译时执行以下操作: 隐式地将整个块(import语句除外)包装到为每个组件实例调用的函数中(而不是仅执行一次) 隐式注册对可变突变的反应性

    8.9K10

    用TS+GraphQL查询SpaceX火箭发射数据

    在查询名的后面,你可以通过使用前缀为$及类型去指定变量,然后在查询体中,你可以使用该变量。对于我们的查询,通过传递 $id 变量来设置启动的id,该变量的类型为String!。 ?...将ID作为查询变量传递 我们传入 id 作为变量,它对应于 LaunchList 查询中的 flight_number。...我们将用这个组件作为智能组件来保持关注点的分离,并且将数据传给只显示给定内容的表示组件。我们还将在等待数据时显示基本的加载和错误状态。...除了 Profile 查询和组件之外,该组件的代码与 index.tsx 文件大致相同。我们还将一个变量传递给 React 钩子,用于启动时的 id。...我们将在 src/App.tsx 文件中包含这些组件,并将 转换为函数组件。用函数组件使其更加简单,并允许我们在添加单击功能时使用钩子。

    3K20

    我用 React 和 Vue 构建了同款应用,来看看哪里不一样(2020 版)

    如果要使用在 ref() 函数内部创建的值,我们将在变量上寻找.value 而不是简单地调用该变量。换句话说,如果我们想要一个持有状态的变量值,我们将寻找 name.value 而不是 name。...你可能觉得…list 看起来很奇怪:开头的三个点称为 spread 运算符,负责将 list 中的所有值作为单独的项目传递,而不是简单地把所有项目打包在一起作为数组传递。感觉有些糊涂吗?...React: 在 React 中,我们将 props 传递到子组件的创建位置。...遍历后者这里是行不通的。 如何将数据发射回父组件? React: 我们首先将函数向下传递给子组件,在调用子组件的位置将其作为 prop 引用。...然后将触发位于父组件中的函数。我们可以在“如何从列表中删除项目”部分中查看全过程。 Vue: 在子组件中,我们只需要编写一个将值返回给父函数的函数即可。

    4.8K30

    如何对第一个Vue.js组件进行单元测试 (下)

    我们的首次测试        让我们来写首个测试。我们首先需要使用shallowMount手动挂载我们的组件,并将其存储在我们将执行断言的变量中。...我们还可以通过propsData属性传递道具作为对象。        ...在处理函数中,我们绑定的每个属性,并在元素上设置一个基于名称和值的数据属性。        我们将一个对象传递给我们的指令,因此我们可以从data-test-开始生成数据属性。...首先,让我们强调一些重要的东西:我们正在测试定义良好的JavaScript函数,而不是UI。        当您查看单个文件组件时,很容易忘记组件编译成JavaScript函数。...在我们的例子中,我们的组件与任何其他函数没有区别:它接受输入并返回输出。这些原因和后果是我们正在测试的,而不是其他任何东西。        令人困惑的是,我们的测试与常规单元测试略有不同。

    3.3K00

    useEffect() 与 useState()、props 和回调、useEffect 的依赖类型介绍

    它是一种存储数据的方式,这些数据会随着时间的推移而变化,并根据任何变化导致重新呈现。它还允许您在组件中声明和更新一段本地状态。...**useState 用于管理组件特定的状态,而 useEffect 则用于处理与组件状态无直接关系但需要根据状态或道具变化触发的副作用或操作。这两个函数是构建 React 项目的基本组件。...props和回调 Props(属性的缩写)用于将数据从父组件传递到子组件。Props是只读的;子组件不能直接修改其 props。它们用于组件之间的通信和数据传输。...props 在渲染组件时定义,并作为 JSX 元素中的属性传递。然后父组件设置并更新其子组件的 props。...={isDarkMode} /> ****另一方面,回调涉及将函数作为 props 传递给子组件。

    40230

    【19】进大厂必须掌握的面试题-50个React面试

    React的render函数从React组件中创建一个节点树。然后,它会响应由用户或系统执行的各种操作引起的数据模型中的突变来更新此树。该虚拟DOM只需三个简单的步骤。...此函数必须保持纯净,即,它必须返回相同的结果每次被调用。 13.如何将两个或多个组件嵌入到一个组件中?...道具是React中Properties的简写。它们是只读组件,必须保持纯净即不变。在整个应用程序中,它们始终从父组件传递到子组件。子组件永远无法将道具发送回父组件。...但是在语法上存在一些差异,例如: 事件使用驼峰式大小写而不是仅使用小写字母命名。 事件是作为函数而不是字符串传递的。 事件参数包含一组特定于事件的属性。...因此,元素无法直接更新其状态,并且其提交由JavaScript函数处理。此功能可以完全访问用户输入到表单中的数据。

    11.2K30

    您可能不需要使用Vue 3的Vuex

    您可以使用reactive函数创建反应变量(替代方法是ref函数)。...provide方法时,该方法中的任何子组件都可以使用该值inject。...状态可以直接更改,没有限制。 您可以通过使用readonly函数包装状态来使其受到保护。它在Proxy防止任何修改的对象中覆盖了传递的变量(尝试时会发出警告)。...通过保护状态免受不必要的修改,新解决方案相对接近Vuex。 摘要 通过使用Vue 3的反应性系统和依赖项注入机制,我们已经从本地状态转变为可以在较小的应用程序中替代Vuex的集中状态管理。...我们有一个状态对象,该对象是只读的,并且对模板的更改有反应。只能通过Vuex中的动作/突变等特定方法来修改状态。您可以使用computed函数定义其他获取器。

    1.4K30

    React学习(最终篇)—— 高阶应用:高阶组件(HOCs)

    常规的React组件都是将传入的props值转换成一个UI返回,而高阶组件是将一个组件转换成另外一个组件。...这个方法应该可以接受一个参数,这个参数将外部组件作为一个子组件传入到方法中,并在方法中完成子组件数据订阅的功能,例如下面的例子中的 withSubscription: const CommentListWithSubscription...容器会管理各种各样的内容,例如:订阅、状态,以及将属性数据传递到子组件中以实现底层组件的渲染功能。容器组件是HOCs模式实现的一部分,可以将HOCs模式看作一个参数化的容器组件。...惯例:将无关的属性值传递到包装组件中 HOCs为一个组件额外增加了一些特性,但是它不应该影响组件原有的功能。对于一个HOC组件来说,他应该和被包装的子组件有相似的输入接口、有相同的返回。...HOC组件应该将那些外部传入但是与HOC组件功能无关的参数按照被包装子组件接口定义的方式传递到子组件中。

    1.7K41

    前端系列12集-全局API,组合式API,选项式API的使用

    请注意,如果您解构 props 对象,解构的变量将失去反应性。因此,建议始终以 props.xxx 的形式访问道具。...返回渲染函数会阻止我们返回任何其他东西。在内部这应该不是问题,但如果我们想通过模板引用将此组件的方法公开给父组件,则可能会出现问题。...注册一个回调函数,若组件实例是 []缓存树的一部分,当组件被插入到 DOM 中时调用。 这个钩子在服务器端渲染期间不会被调用。...el.focus()       }     }   } } 从 [data]选项函数中返回的对象,会被组件赋为响应式。...为保持一致性,我们推荐使用[模板引用]来直接访问元素而不是依赖 $el。

    52630

    VueJs中如何使用provide与inject

    props这种方式接收,如果想要一层一层的传递,这种方式就会比较麻烦,不灵活 provide与inject就是解决:怎么从祖组件的数据,传递到孙组件,实现跨级组件传递数据的 在vue3.0里面,同样提供了...provide与inject,使用起来更简单方便,单纯的从概念上去看,是比较抽象,难以理解的 还是要从具体的实例出发 01 provide()函数 定义:提供一个值,可以被后代组件注入 实现: 父组件有一个...那怎么样把这个数据传递到子孙组件,那么就需要用到inject了的 02 inject()函数 定义: 注入一个由祖先(父)组件或整个应用提供的值 实现: 接收父(祖)组件传递过来的值 inject(第一个参数...,如果默认值本身就是一个函数 那么必须将false作为第三个参数传入,表明这个函数就是默认值,而不是一个工厂函数 与注册生命周期钩子的API类似,inject()必须在组件的setup()阶段同步调用...}} 若使用解构时,则模板中可直接使用变量 {{name}}--{{website}} 注意 如果是解构变量,想要数据响应式,那么需要使用toRef()或toRefs()将数据进行转化为响应式 如下是完整的示例

    91120

    【愚公系列】2023年03月 其他-Web前端基础面试题(react专项_35道)

    state)和属性(props)之间有何不同 4、什么是高阶组件 5、为什么建议传递给 setState 的参数是一个 callback 而不是一个对象 6、(在构造函数中)调用 super(props...29、使用箭头函数(arrow functions)的优点是什么 30、为什么建议传递给 setState 的参数是一个 callback 而不是一个对象 31、 (在构造函数中)调用 **super(...State 可能会随着时间的推移而发生突变,但多数时候是作为用户事件行为的结果。 Props则是组件的配置。props 由父组件传递给子组件,并且就子组件而言,props 是不可变的。...Hooks 出现之后,我们将复用逻辑提取到组件顶层,而不是强行提升到父组件中。...React组件的生命周期分为三个不同的阶段: 初始呈现阶段:这是组件即将开始其生命旅程并到达DOM的阶段。 更新阶段:一旦将组件添加到DOM中,它可能只在发生道具或状态更改时才更新和重新呈现。

    7.6K10

    用 Lunchbox 在 vue3 中创建一个旋转的 3D 地球竟是如此简单

    scene.add(mesh) 为了在 Lunchbox.js 应用程序中创建相同的网格,我们将使用相同的类,除了作为组件,而不是将它们分配给变量并将它们与 Mesh() 类组合,我们将它们嵌套在 组件都使用 args 属性将参数作为 props。 argsprop 接受一个参数数组并将其传递给组件的类构造函数。.../App.vue' createApp(App).mount('#app') 在这里,我们从 lunchboxjs 而不是从 vue 导入 createApp 函数。...转到 App.vue 组件的脚本部分并从 Vue 导入 ref 和从 Lunchbox 导入 onBeforeRender 函数。...import {ref} from 'vue' import {onBeforeRender} from 'lunchboxjs' 接下来,将 ref 分配给一个 rotation 变量,并将一个具有以下属性的对象传递给它

    57710

    关于信号与系统里微分方程初值条件选择

    零状态响应: 系统在初始状态为零的情况下,仅由外部输入引起的输出响应。反映了系统对外部输入的反应,与系统的传递函数密切相关。 完全响应: 系统的完全响应是零输入响应和零状态响应的叠加。...初始值通常是指系统状态变量在t=0时刻的值。 至于下面两个给系统注入不同能量的形式。...在0输入条件下,只要内部的结构和参数不变化, 0输入响应是齐次方程的解,但不是系统的齐次解。 当我们将系统的输入置为零时,所得到的输出就是零输入响应。齐次方程是指等号右侧为零的方程。...因为零输入响应是在输入为零的情况下得到的,而输入为零恰好对应着齐次方程。 零输入响应不是系统的齐次解: 因为系统的齐次解是一个函数族,而零输入响应是这个函数族中满足初始条件的一个特定解。...也就是说,零输入响应是齐次解的一个特例,而不是整个齐次解。 求这个,0输入响应 OK,A怎么求? 因为求的是0输入,所以就是之前的能量等于现在现在的输入,因为在0时刻没有突变。

    6900

    【React】1981- React 的 8 种条件渲染的方法

    这些先进技术通常用于较大的应用程序或需要更高抽象级别的特定情况: 误差边界: 错误边界是在其子组件树中的任何位置捕获 JavaScript 错误、记录这些错误并显示后备 UI 而不是崩溃的组件树的组件。...08、渲染 Prop 此模式涉及一个作为 prop 传递给组件的函数,返回一个 React 元素。...它不会自行渲染某些内容,而是接受一个函数作为其“render”属性,并将渲染责任委托给该函数。它还会将“isOnline”状态传递给该函数。...现在,在父组件中,我们可以使用 UserOnlineStatus 并向其传递一个函数,以根据用户的在线状态呈现我们想要的内容。...相反,它将渲染委托给一个 prop(render prop),该 prop 是由父组件(在本例中为 App)传递的函数。

    13810

    优化 React APP 的 10 种方法

    我们有一个变量resCount,expFunc该count变量从useState挂钩中调用。我们有一个输入,可以count在键入任何内容时设置状态。...这是useCallback出现的地方,我们将把功能道具传递给useCallback并指定依赖项,useCallback钩子返回函数式道具的记忆版本,这就是我们将传递给TestComp的东西。...useCallback将检查check变量,如果不相同,其上一个值,它将返回函数传递所以TestComp和React.memo会看到一个新的参考和重新渲染TestComp,如果不一样useCallback...10. shouldComponentUpdate() React应用程序由组件组成,从根组件(通常是App.js中的App)到扩展分支。...这样,React为我们提供了一种方法来控制组件的重新渲染,而不是通过React来控制内部逻辑,这是shouldComponentUpdate方法。

    33.9K20

    精读《我不再使用高阶组件》

    可能这是 JSX 与 template 之间的差异吧,也是变量与字符串之间的差异,变量同名但含义不同,所以可抽象,而模版靠规则和名称确定含义。...高阶组件的特点是,JSX 描述的子元素,会注入到父级组件的 this.props.children 中,因此可以无入侵增强组件能力,常用比如权限、跳转、埋点、异常、描述、注入等等。...2 内容概要 高阶组件由于可嵌套,如果有一环高阶组件没有将内部 wrappedComponent 暴露出来,会导致后续叠加的高阶组件都无法获取、注入到原始组件。...state = { coffee: "Americano" }; render() { return this.props.children(this.state.coffee); } } 直接将函数作为子元素...renderProps 为了解耦,让控制权从上到下传递,而底层实现不需要了解上层实现,这是解决 JSX 修改组件模版问题的方法之一,作为优化点之一,可以考虑让传入的 props 自身作为一个组件: const

    43120

    Vue中组件最常见通信的方式

    prop/$emit   父组件通过prop的方式向子组件传递数据,而通过$emit子组件可以向父组件通信。 ?   ...$attrs和$listeners   当需要用到从A到C的跨级通信时,我们会发现prop传值非常麻烦,会有很多冗余繁琐的转发操作;如果C中的状态改变还需要传递给A,使用事件还需要一级一级的向上传递,代码可读性就更差了...我们首先定义了两个msg,一个给子组件展示,另一个给孙组件展示,首先将这两个数据传递到子组件中,同时将两个改变msg的函数传入。 ?   ...provide/inject是vue2.2+版本新增的属性,简单来说就是父组件中通过provide来提供变量, 然后再子组件中通过inject来注入变量。...我们通过父组件将elFormItem本身注入到子组件中,子组件通过inject获取父组件本身然后动态地计算buttonSize。

    1.6K20
    领券