2016-01-21 70 views
3

的设置未捕获不变违规:traverseParentPath(...):不能和同一ID,``

在我的项目我用了很多图书馆的移动,但这种情况下,我觉得这些是相关的:redux-form,material-uiparse

在我的应用我有一个表格组件,它看起来像这样:

class ObjectForm { 

    render() { 
    const { fields: { field }, handleSubmit, submitting } = this.props; 

    return (
     <form onSubmit={handleSubmit}> 
     <TextField hintText="Hint Text" {...field} /> 
     <RaisedButton label="Send" type="submit" disabled={submitting} /> 
     </form> 
    ); 
    } 

} 

由容器包裹,是这样的:

function mapStateToProps(state) { 
    const { object } = state; 
    return { 
    object, 
    initialValues: { 
     field: object.get('field'), 
    }, 
    onSubmit: data => { 
     return object.save({ 
     field: data.field, 
     }); 
    }, 
    }; 
} 

export default reduxForm({ 
    form: 'objectForm', 
    fields: [ 
    'field', 
    ], 
}, mapStateToProps)(ObjectForm); 

问题

的问题是那当表单很脏时(我改变了输入的值),我得到这个错误:

Uncaught Invariant Violation: traverseParentPath(...): Cannot traverse from and to the same ID, ``. 

除此之外,解析对象实际上被保存,但按钮不会禁用,直到保存结束。

如果我只是再次提交表单,而不更改任何值,一切正常。

什么引起它

到现在为止,我能找到3个代码,如果删除,使误差走开!

第一个是提交按钮的disabled属性。删除disabled={submitting}部分,使错误消失,但我错过了视觉反馈。 更新:如果我删除disabled属性,但使用submitting属性有条件地显示加载指示器没有错误引发,但该指标也没有显示(尽管它确实显示如果表单是干净的)。

第二个是不发送initialValues道具到reduxForm。删除initialValues: {...}也会导致错误消失。

最后但并非最不重要的一点是,不要将新值设置为parse对象属性也会使错误消失。只需从object.save调用中删除参数,一切正常。

帮助!

因为这个,我挣扎了好几天,我没有想法。

调用堆栈

enter image description here

+0

我得到了同样的错误信息。在我的情况下,它实际上掩盖了一个简单的JavaScript错误(一个未定义的变量)。因此,调试你的应用程序,在你的'render'方法中设置一个断点,并确保所有变量('fields','handleSubmit','submitting')在使用时都被定义。 –

+0

我遇到了与反应形式和材料用户界面相同的问题。我发现这个错误来自一个被调用的方法,用来在按钮上生成一个'disabled'属性。在我的情况下,错误的根源在于一个回调被formy-react调用的非常随机的一组参数调用,它为我禁用的prop创建了未定义的值。我建议你看一下''使用'console.log'提交出来的值。 – hookd

+0

'即'? –

回答

5

我被看远一点了调用堆栈运行到了同样的错误,并找到了根源:

enter image description here

“类型“和”道具“信息让我得到了我写的这段小小的代码,无论出于什么原因, CT:

<textPath 
ref={(node) => { 
     node && node.setAttribute("startOffset", '50%') 
     }} 
> 
    {text} 
</textPath> 

谈到了裁判固定对我来说:

<textPath 
// ref={(node) => { 
//  node && node.setAttribute("startOffset", '50%') 
//  }} 
> 
    {text} 
</textPath> 

对我来说,解决它可能意味着移动反应15,其中SVG标签完全支持,我不会有依靠参考黑客。我不确定你的情况会有什么修复,但是我认为我会分享我的情况以防万一。

干杯, 托马斯

+0

我有同样的问题。我手动更新了反应热键以使用react-dom 15.5.4,并解决了问题。 – Zui

相关问题