Creating variables for destructured objects in addition to their properties

后端 未结 3 1959
我寻月下人不归
我寻月下人不归 2021-01-17 11:33

I have:

const { state: { mode } } = this

console.log(mode) //\'mode\'
console.log(state) //undefined

I want to declare the state

相关标签:
3条回答
  • 2021-01-17 11:47

    You can destructure the state to a variable as well:

    const { state, state: { mode } } = { state: { mode: 'mode' } };
    
    console.log(mode) // 'mode'
    console.log(state) // { mode: 'mode' }

    0 讨论(0)
  • 2021-01-17 11:51

    Sure, just use a comma as if you were destructing another property of the parent object:

    const obj = { state: { mode: 'str' }};
    const { state: { mode }, state } = obj;
    console.log(mode);
    console.log(state);

    Note that this looks very similar to, but is not the same as the following import syntax you may have seen:

    import React, { Component } from 'react'
    

    Here, the variables in brackets are named exports, while the plain variable is the default export, which is entirely different from nested objects.

    0 讨论(0)
  • 2021-01-17 12:06

    While all the other answer here suggested a word around to get values, but i am adding this answer to explain why we getting only the deep most nested value

    let state = {
        state: {
          mode : 'some value'
     }
    }
    
    const { state: { mode } } = state
    

    When you do nested destructing you will be complied to something like this

    var state = {
      state: {
        mode: 'some value'
      }
    };
    var mode = state.state.mode;  // this is how your de-structuring is interpreted 
    

    It is not creating a separate variable for each of the property,

    0 讨论(0)
提交回复
热议问题