2021-06-15 00:49:18 -07:00
---
id: 5a24c314108439a4d403615b
2021-07-19 16:05:37 +05:30
title: Copiar um objeto com Object.assign
2021-06-15 00:49:18 -07:00
challengeType: 6
forumTopicId: 301437
dashedName: copy-an-object-with-object-assign
---
# --description--
2021-08-20 00:00:51 -07:00
Os últimos desafios funcionaram com arrays, mas também existem maneiras de ajudar a impor a imutabilidade do state quando o state for um `object` . Uma ferramenta útil para lidar com objetos é a utilidade do `Object.assign()` . `Object.assign()` recebe um objeto alvo e objetos fonte e mapeia propriedades dos objetos de origem para o objeto alvo. Qualquer propriedades correspondentes são substituídas por propriedades nos objetos de origem. Esse comportamento é comumente usado para fazer cópias rasas de objetos, passando um objeto vazio como o primeiro argumento seguido do(s) objeto(s) que você deseja copiar. Exemplo:
2021-06-15 00:49:18 -07:00
```js
const newObject = Object.assign({}, obj1, obj2);
```
2021-07-26 23:39:21 +09:00
Isso cria `newObject` como um novo `object` , que contém as propriedades que atualmente existem em `obj1` e `obj2` .
2021-06-15 00:49:18 -07:00
# --instructions--
2021-07-26 23:39:21 +09:00
O estado e ações do Redux foram modificados para manipular um `object` para o `state` . Edite o código para retornar um novo objeto `state` para ações com tipo `ONLINE` , que define a propriedade `status` para a string `online` . Tente usar `Object.assign()` para completar o desafio.
2021-06-15 00:49:18 -07:00
# --hints--
2021-07-30 23:57:21 +09:00
A store do Redux deve existir e inicializar com um estado equivalente ao objeto `defaultState` declarado na linha 1.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
const expectedState = {
user: 'CamperBot',
status: 'offline',
friends: '732,982',
community: 'freeCodeCamp'
};
const initialState = store.getState();
return DeepEqual(expectedState, initialState);
})()
);
```
2021-07-30 23:57:21 +09:00
`wakeUp` e `immutableReducer` devem ser funções.
2021-06-15 00:49:18 -07:00
```js
assert(typeof wakeUp === 'function' & & typeof immutableReducer === 'function');
```
2021-07-30 23:57:21 +09:00
Despachar uma ação do tipo `ONLINE` deve atualizar a propriedade `status` no estado para `online` e NÃO deve alterar o estado.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
const initialState = store.getState();
const isFrozen = DeepFreeze(initialState);
store.dispatch({ type: 'ONLINE' });
const finalState = store.getState();
const expectedState = {
user: 'CamperBot',
status: 'online',
friends: '732,982',
community: 'freeCodeCamp'
};
return isFrozen & & DeepEqual(finalState, expectedState);
})()
);
```
2021-07-19 16:05:37 +05:30
`Object.assign` deve ser usado para retornar um novo estado.
2021-06-15 00:49:18 -07:00
```js
(getUserInput) => assert(getUserInput('index').includes('Object.assign'));
```
# --seed--
## --seed-contents--
```js
const defaultState = {
user: 'CamperBot',
status: 'offline',
friends: '732,982',
community: 'freeCodeCamp'
};
const immutableReducer = (state = defaultState, action) => {
switch(action.type) {
case 'ONLINE':
// Don't mutate state here or the tests will fail
return
default:
return state;
}
};
const wakeUp = () => {
return {
type: 'ONLINE'
}
};
const store = Redux.createStore(immutableReducer);
```
# --solutions--
```js
const defaultState = {
user: 'CamperBot',
status: 'offline',
friends: '732,982',
community: 'freeCodeCamp'
};
const immutableReducer = (state = defaultState, action) => {
switch(action.type) {
case 'ONLINE':
return Object.assign({}, state, {
status: 'online'
});
default:
return state;
}
};
const wakeUp = () => {
return {
type: 'ONLINE'
}
};
const store = Redux.createStore(immutableReducer);
```