解构和计算的名称一起工作,es6

时间:2017-10-26 08:21:26

标签: javascript ecmascript-6

我用这段代码调用一个函数,

gqlActions('customer', 'Add', this.props, values);

gqlActions('customer', 'Update', this.props, values);

此功能用于添加和更新操作。 在函数上我使用了计算属性,例如在

const tableAction= `${table}${action}`;
[tableAction]: valuesOptimistic,

它工作正常,我的问题是在解构之前,之后使用该变量:

update: (store, { data: { [tableAction] }}) => { 
    data.customers.push([tableAction]);

它不是有效的语法...,在我使用硬编码之前添加'行动:

update: (store, { data: { customerAdd }}) => {
    data.customers.push(customerAdd);
},

update: (store, { data: { customerUpdate }}) => {
    data.customers.push(customerUpdate);
}, 

因为我发送了更新'属于图书馆的属性,它向我发送了与我在以下位置定义的[tableAction]相关的值:

optimisticResponse: {
   [tableAction]: valuesOptimistic,
}

我的意思是非规范化中的参数是可变的(更新或添加)。我希望能够清楚。

我的全部功能:

export const gqlActions = (table, action, props, values) => {

    const valuesOptimistic = {
        ...Object.assign({}, values, __typename: table'}) 
    };

    const tableAction= `${table}${action}`;
        props.mutate(
            {
                variables: values,
                optimisticResponse: {
                    [tableAction]: valuesOptimistic,
                },
                update: (store, { data: { [tableAction] }}) => {
                    data.customers.push([tableAction]);
                },
            },
        )
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用destructuring using computed property names

update: (store, { data: { [tableAction]:action }}) => {
            data.customers.push(action);
         }