标签: mutation

如何在OCaml中保存和更改变量的值?

这可能是一个非常新手的问题,但我找不到答案.我需要存储,例如一个列表,然后在同一个指针下用另一个替换它.

ocaml variable-assignment mutation

5
推荐指数
1
解决办法
3969
查看次数

在 DOM 中修改/删除节点/元素后恢复节点/元素

我需要一种方法来检测是否有任何 DOM 节点/元素已被删除或修改,并立即将该元素恢复到之前的状态。

我尝试“备份” body 节点,并在第一次运行后每次 MutationObserver 被触发时将 body.innerHTML 设置为其原始状态,但这会导致浏览器崩溃。

有没有快速的方法来恢复已修改或删除的元素?

javascript jquery dom mutation mutation-observers

5
推荐指数
1
解决办法
6474
查看次数

graphql - 在突变中使用查询 - 创建嵌套对象

我有一个非常简单的模型post,嵌入了几个comments

我想知道我应该怎么做一个突变来添加一个新commentpost

由于我已经定义了一个查询以获取post给定的查询id,我想尝试使用以下变异语法

mutation {
  post(id: "57334cdcb6d7fb172d4680bb") {
    addComment(data: {
      text: "test comment"
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法找到一种方法让它发挥作用.即使我处于变异状态,输出类型是一个postaddComment也被认为是一个字段post应该有的.

你们有什么想法吗?

谢谢

nested mutation graphql graphql-js

5
推荐指数
1
解决办法
668
查看次数

如何使用GraphQL删除多个项目?

我是GraphQL的新手.如何在GraphQL中编写删除突变以删除多个项目(多个ID)?我用scaphold.io.

datatables mutation graphql

5
推荐指数
1
解决办法
4563
查看次数

Vuex - 仅对操作公开突变

我想使用 Vuex 来存储有关我的客户端 - 服务器通信的状态,例如搜索逻辑:

// status is either synching|synched|error
state: { query:"", result:[], status:"synching" } 
Run Code Online (Sandbox Code Playgroud)

我实现了搜索操作。动作只能通过突变修改状态:

function search(context, query) {
    context.commit("query", query);
    context.commit("status", "synching");

    // some asynch logic here
    ...
        context.commit("result", result);
        context.commit("status", "synched");
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,现在这些突变也暴露给了我的组件,它们现在能够使我的状态不一致。是否可以隐藏组件的突变?

visibility action mutation vue.js vuex

5
推荐指数
1
解决办法
966
查看次数

GraphQL:使用接口管理突变的最佳方式?

我是 GraphQL 的新手,但我真的很喜欢它。现在我在玩接口和联合,我面临着突变的问题。

假设我有这个架构:

interface FoodType {
  id: String
  type: String
}

type Pizza implements FoodType {
  id: String
  type: String
  pizzaType: String
  toppings: [String]
  size: String
}

type Salad implements FoodType {
  id: String
  type: String
  vegetarian: Boolean
  dressing: Boolean
}

type BasicFood implements FoodType {
  id: String
  type: String
}
Run Code Online (Sandbox Code Playgroud)

现在,我想创造新的食物,所以我开始做这样的事情:

type Mutation {
    addPizza(input:Pizza):FoodType
    addSalad(input:Salad):FoodType
    addBasic(input:BasicFood):FoodType
}
Run Code Online (Sandbox Code Playgroud)

这不起作用有两个原因:

  1. 如果我想传递一个对象作为参数,这个对象必须是“输入”类型。但是“Pizza”、“Salad”和“BasicFood”只是“类型”。
  2. 输入类型不能实现接口。

所以,我的问题是:如何在接口的这种上下文中处理突变而不必过多地复制类型?我想避免使用 Pizza 类型的查询和 InputPizza 类型的突变。

感谢您的帮助。

interface mutation apollo graphql

5
推荐指数
1
解决办法
1612
查看次数

直接在模板中使用/修改Vuex状态

我想我对Vue + Vuex有误解。

我有一个 Vuex 状态,其中包含一个列表过滤器。列表中的每个过滤器项目都可以标记为已选择。但是 - Vuex 状态只能在单击应用按钮时通过修改器进行修改,以便其他组件可以对更改做出反应。

例如,列表将根据所选过滤器重新加载数据。当状态更新时,组件也应该更新。

我创建了一个CodePen:

https://codepen.io/anon/pen/OzEJWP?editors=1010

https://jsfiddle.net/rxqu7ame/

Vue.component('filter-item', {
    template: ` <div>
            <!--{{item.color}} ({{item.selected}}) <button @click="item.selected = !item.selected">toggle</button>-->
            {{item.color}} ({{isSelected}}) <button @click="isSelected = !isSelected">toggle</button>
          </div>`,
    data: function () {
        return {
            isSelected: this.item.selected
        }
    },
    computed: {
        /*isSelected : function(){
          return this.item.selected;
        }*/
    },

    props: ['item']
});  
Run Code Online (Sandbox Code Playgroud)

我遇到了不同的问题:

  1. selected当我直接在模板内切换属性时filter-item,Vuex 状态也会更新(我不想要)。

  2. 因此,我尝试使用状态初始化数据属性(组件的本地属性),这样只有数据变量isSelected会被更新。当我按下“应用”按钮时,Vuex 状态将被更新(稍后我将使用突变)。到目前为止,一切都很好。但现在,isSelected当状态发生变化时,该属性不会自动更新。

  3. 如果我使用计算属性,isSelected则无法在单击事件中更改(因为它是只读的)。

实现我想要的场景的正确方法是什么?

mutation vue.js vuex

5
推荐指数
1
解决办法
4189
查看次数

vuex 未知本地突变类型:updateValue,全局类型:app/updateValue。突变不起作用

我想通过操作将更改应用于 vuejs 应用程序中的变量。但我收到这个错误说[vuex] unknown local mutation type: updateValue, global type: app/updateValue

这是我的商店文件夹结构:

-store
    -modules
    -app
        -actions.js
        -getters.js
        -mutations.js
        -state.js
    -index.js
    -actions.js
    -getters.js
    -mutations.js
    -state.js
    -index.js
Run Code Online (Sandbox Code Playgroud)

这是我的./store/index.js文件:

-store
    -modules
    -app
        -actions.js
        -getters.js
        -mutations.js
        -state.js
    -index.js
    -actions.js
    -getters.js
    -mutations.js
    -state.js
    -index.js
Run Code Online (Sandbox Code Playgroud)

这是我的./store/modules/index.js

import Vue from 'vue'
import Vuex from 'vuex'

import actions from './actions'
import getters from './getters'
import modules from './modules'
import mutations from './mutations'
import state from './state'

Vue.use(Vuex)

const store = new …
Run Code Online (Sandbox Code Playgroud)

action store mutation vue.js vuex

5
推荐指数
1
解决办法
1万
查看次数

通过子进程改变 Vue prop 有多危险?

Vue 允许改变 props,但不推荐。在文档(https://vuejs.org/guide/components/props.html#one-way-data-flow)中我发现

作为最佳实践,您应该避免此类突变 [通过子级改变嵌套 props],除非父级和子级在设计上紧密耦合。

对我来说,这听起来不是一个好的做法,但没关系。然而,在我发现的所有论坛帖子中,他们都说“永远不要这样做!”之类的话。并且父组件的重新渲染甚至可能会损坏数据(即Vue 2 - Mutating props vue-warn)。

如果由我决定,我会坚持建议,而不是争论这一点。然而,我工作的团队广泛使用 prop 突变。

目前为止还可以,但是我担心将来可能会出现问题。在未来的版本中,Vue 是否真的会禁止这样做?或者他们应用了仅与遵循建议的代码兼容的细微更改?

我想知道的是,其他人如何处理对象深处发生变化的情况。当通过发出来完成此操作时,在其间的所有组件中也需要大量发出。

了解道具突变的做法是多么不常见也很有趣。你们中有人也这样做吗?

javascript prop mutation vue.js

5
推荐指数
1
解决办法
252
查看次数

Vuex - 更新突变中的对象

用户单击按钮后,我想用本地对象中的数据替换 vuex 存储中的数据。但我被突变困住了。这是一些代码以了解更多详细信息。

这是用户单击按钮后调用的方法。(this.tableview是一个本地对象,与vuex对象具有相同的值)

            updateVuexTableview() {
                // eslint-disable-next-line no-console
                console.log("Update Vuex Table view");
                this.updateTableview(this.tableview)
            }
Run Code Online (Sandbox Code Playgroud)

在这个方法中我的 vuex 动作被调用。看起来像这样:(updTableview是我要插入的新数据)

async updateTableview({commit}, updTableview) {
        const response = await axios.put(
            `http://localhost:3000/tableview`,
            updTableview
        );

        // eslint-disable-next-line no-console
        console.log(response.data);

        commit('updateTableviewMut', response.data);
    },
Run Code Online (Sandbox Code Playgroud)

这就是所谓的突变。这就是我被困住的地方。我尝试弹出数据并再次推送它,但到目前为止没有任何效果。

    updateTableviewMut: (state, updTableview) => {
        state.tableview.push(updTableview)
    },
Run Code Online (Sandbox Code Playgroud)

这就是我的状态:

const state = {
    tableview: {
        "thema_c": true,
        "status_c": true,
        "priority_c": true,
        "custom1_c": true,
        "custom2_c": true,
        "customFieldName1": "Custom1",
        "customFieldName2": "Custom2"
    },
};
Run Code Online (Sandbox Code Playgroud)

javascript object mutation vue.js vuex

4
推荐指数
1
解决办法
6353
查看次数