2017-01-11 8 views
1

Так что в моем React проекте, у меня есть состояние запасной вариант по умолчанию для формы адреса, которая выглядит следующим образом:Лучший способ создать объект с каждым ключом равным нулю?

state = { 
    newLocation: this.props.location || { 
    lat: null, 
    lng: null, 
    street: null, 
    complement: null, 
    neighbourhood: null, 
    city: null, 
    state: null, 
    zipCode: null, 
    country: null, 
    }, 
} 

Тем не менее, чувствует себя довольно смешно определение такой большой объект со всеми ключами, равными нулю. Есть ли более короткий способ сделать это? Что-то в ES6/ES7?

+1

они абсолютно должны быть явно установлен в 'null' ли? Не может ли какой-либо код, который использует эти свойства, просто принять 'undefined' в качестве пустого значения, чтобы вы могли просто иметь:' newLocation: this.props.location || {} '. – CodingIntrigue

ответ

2

Вы можете использовать массив и перебирать ключи и построить новый объект с Object.assign.

var keys = ['lat', 'lng', 'street', 'complement', 'neighbourhood', 'city', 'state', 'zipCode', 'country'], 
 
    loc = { lat: 123, lng: 246, city: 'NY', country: 'USA' }, 
 
    state = { 
 
     newLocation: Object.assign(keys.reduce((o, k) => Object.assign(o, { [k]: null }), {}), loc) 
 
    }; 
 

 
console.log(state);
.as-console-wrapper { max-height: 100% !important; top: 0; }

-2

Используйте defaultProps метод

defaultProps может быть определена как свойство на самом классе компонентов, чтобы установить подпорки по умолчанию для класса. Это используется для неопределенных реквизитов, но не для нулевого реквизита. Например:

class CustomButton extends React.Component { 
    // ... 
} 

CustomButton.defaultProps = { 
    color: 'blue' 
}; 
+0

Это не отвечает на вопрос. Я имею в виду, вам все равно придется явно указывать все эти свойства на нуль. – CodingIntrigue

+0

Тогда просто пусть это будет неопределенным, если вы хотите установить его по одному –