的设置未捕获不变违规:traverseParentPath(...):不能和同一ID,``
在我的项目我用了很多图书馆的移动,但这种情况下,我觉得这些是相关的:redux-form,material-ui和parse。
在我的应用我有一个表格组件,它看起来像这样:
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
调用中删除参数,一切正常。
帮助!
因为这个,我挣扎了好几天,我没有想法。
调用堆栈
我得到了同样的错误信息。在我的情况下,它实际上掩盖了一个简单的JavaScript错误(一个未定义的变量)。因此,调试你的应用程序,在你的'render'方法中设置一个断点,并确保所有变量('fields','handleSubmit','submitting')在使用时都被定义。 –
我遇到了与反应形式和材料用户界面相同的问题。我发现这个错误来自一个被调用的方法,用来在按钮上生成一个'disabled'属性。在我的情况下,错误的根源在于一个回调被formy-react调用的非常随机的一组参数调用,它为我禁用的prop创建了未定义的值。我建议你看一下''使用'console.log'提交出来的值。 – hookd
在 '即 '? –