一旦用戶注冊無誤,我將嘗試顯示成功反饋。有一個錯誤 redux reducer 物件,它存盤來自后端的錯誤。如果if statement錯誤物件為空,則應該給出成功反饋,如果有錯誤則顯示錯誤,如果沒有錯誤,它也會注冊用戶,但似乎沒有執行該if(props.errors === {})塊。
function onSubmit(e) {
e.preventDefault();
const newUser = {
fname: fname,
lname: lname,
phone: phone,
email: email,
password: password,
};
dispatch(register(newUser));
if (props.errors === {}) { //This block is not executed
setSnackOpen(true);
setFname('');
setLname('');
setEmail('');
setPhone('');
setPassword('');
}
console.log('errors :' props.errors); //logs 'errors : [object, object]'
}
錯誤減少器:
import { GET_ERRORS } from '../actionTypes/actionTypes';
const initialState = {
};
export const errorReducer = (state = initialState, action) => {
switch (action.type) {
case GET_ERRORS:
return action.payload
default:
return initialState;
}
};
uj5u.com熱心網友回復:
因為您正在將 props.errors 與 {} 新的空物件進行比較,所以即使兩者都是空的,它們也指向不同的記憶體位置,所以 if 條件將為陳述句回傳 falseif(props.errors === {})
您可以檢查 props.errors 的長度,例如
if(!Object.keys(props.errors).length)
uj5u.com熱心網友回復:
每次宣告一個新物件(空或非空)時,都會使用新的參考創建它。您可以在開發控制臺中運行以下代碼。所有這些都會給出錯誤的結果。因為 obj1 與 obj2 是不同的空物件。
var obj1 = {}
var obj2 = {}
console.log(obj1 === {})
console.log(obj2 === {})
console.log(obj1 === obj2)
false
false
false
檢查物件是否為空的一種方法是:
Object.keys(obj1)
這將為您提供來自物件的鍵值陣列。因此,您可以檢查陣列的長度。
const keysArray = Object.keys(obj1)
if (keysArray.length === 0){
// do something
}
uj5u.com熱心網友回復:
這if (props.errors === {})永遠不會true,因為它實際上是在比較它們references,它們是不一樣的。
我會這樣做,優點是它既適用于沒有任何鍵的情況,也適用于有一些鍵但它們的值為空的情況。
if (!Object.keys(props.errors).some((k) => props.errors[k]))
當您考慮{firtNameError:"", lastNameError:"" }和{}為空時,它很有幫助。請參閱下面的片段:
const objOne={firtNameError:"", lastNameError:"" };
const objTwo= {};
if(!Object.keys(objOne).length){
console.log("First console prints empty")
}
if (!Object.keys(objOne).some((k) => objOne[k])){
console.log("Second console prints empty")
}
if(!Object.keys(objTwo).length){
console.log("First console prints empty")
}
if (!Object.keys(objTwo).some((k) => objTwo[k])){
console.log("Second console prints empty")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493340.html
標籤:javascript 反应 还原
