的設置未捕獲不變違規: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
在 '即 '? –