14. 解构赋值

1. 对象的基本解构

  1. // 例子 14-1
  2.  
  3. componentWillReceiveProps(newProps) {
  4. this.setState({
  5. active: newProps.active
  6. })
  7. }
  8.  
  9. componentWillReceiveProps({active}) {
  10. this.setState({active})
  11. }
  1. // 例子 14-2
  2.  
  3. // bad
  4. handleEvent = () => {
  5. this.setState({
  6. data: this.state.data.set("key", "value")
  7. })
  8. };
  9.  
  10. // good
  11. handleEvent = () => {
  12. this.setState(({data}) => ({
  13. data: data.set("key", "value")
  14. }))
  15. };
  1. // 例子 14-3
  2.  
  3. Promise.all([Promise.resolve(1), Promise.resolve(2)])
  4. .then(([x, y]) => {
  5. console.log(x, y);
  6. });

2. 对象深度解构

  1. // 例子 14-4
  2.  
  3. // bad
  4. function test(fruit) {
  5. if (fruit && fruit.name) {
  6. console.log (fruit.name);
  7. } else {
  8. console.log('unknown');
  9. }
  10. }
  11.  
  12. // good
  13. function test({name} = {}) {
  14. console.log (name || 'unknown');
  15. }
  1. // 例子 14-5
  2.  
  3. let obj = {
  4. a: {
  5. b: {
  6. c: 1
  7. }
  8. }
  9. };
  10.  
  11. const {a: {b: {c = ''} = ''} = ''} = obj;

3. 数组解构

  1. // 例子 14-6
  2.  
  3. // bad
  4. const splitLocale = locale.split("-");
  5. const language = splitLocale[0];
  6. const country = splitLocale[1];
  7.  
  8. // good
  9. const [language, country] = locale.split('-');

4. 变量重命名

  1. // 例子 14-8
  2.  
  3. let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
  4. console.log(baz); // "aaa"

5. 仅获取部分属性

  1. // 例子 14-9
  2.  
  3. function test(input) {
  4. return [left, right, top, bottom];
  5. }
  6. const [left, __, top] = test(input);
  7.  
  8. function test(input) {
  9. return { left, right, top, bottom };
  10. }
  11. const { left, right } = test(input);