2016-12-08 4 views
2

Я работал с неизменностью и сокращением, и я столкнулся с проблемой, которая не является серьезной, но если есть решение для нее, тогда это было бы здорово. Ответ может быть глупым, но поскольку я новичок в ES, я думаю, как мы можем достичь этого.Как разрушить объект для получения возвращаемого значения из метода?

Ниже мой редуктор:

import Immutable from 'immutable'; 
import { TODOYO } from '../constants/action-types'; 

const initialState = Immutable.Map({ 
    message: null, 
}); 

export default function todos(state = initialState, action) { 
    switch (action.type) { 
    case TODOYO: 
     return state.set('message', action.payload); 
    default: 
     return state; 
    } 
} 

Ниже моя функция mapStateToProps в компоненте:

function mapStateToProps(state) { 
    const message = state.todos.get('message'); 

    return { 
    message, 
    }; 
} 

Как я могу destructure state, чтобы получить сообщение?

Я думал, что-то вроде этого:

const { 
    todos: { 
    message: get('message') 
    } 
} = state; 

, что неправильно. Есть ли способ получить сообщение?

ответ

2

Если у вас нет message в качестве одного из ключей вашего состояния, вы можете сделать это, используя синтаксис default parameters. Если сообщение существует как свойство в вашем состоянии, значение по умолчанию будет переопределено. Поэтому используйте с осторожностью.

function mapStateToProps({ todos, message = todos.get('message') }) { 
    return { 
    message, 
    }; 
} 

И вы можете также сократить mapStateToProps к функции стрелка:

const mapStateToProps = ({ todos, message = todos.get('message') }) => ({ 
    message 
}); 
+0

Интересно. Благодарю. –

1

Это не представляется возможным. Вы можете только разрушать массивы/объекты, а не выполнять функции в рамках деструктурирования.

Синтаксис присваивания деструктурирующего является выражением JavaScript, что позволяет извлекать данные из массивов или объектов на отдельные переменные.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

Смежные вопросы