V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lolizeppelin
V2EX  ›  程序员

请问 es6 有什么漂亮的方式实现默认值

  •  
  •   lolizeppelin · 2018-04-03 20:05:38 +08:00 · 2671 次点击
    这是一个创建于 2427 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    const propsDefault = {
      open: false,
      payload: {
        title: '默认提交',
        styles: stylesDefault,
        data: '默认显示内容',
        onSubmit: null,
        diableSubmit: false,
        onCancel: null,
        diableCancel: false,
      },
    };
    
    
    function defaultProps(payload) {
      const formatedProps = {};
      if (payload.onSubmit === undefined) { formatedProps.onSubmit = propsDefault.payload.onSubmit; } else { formatedProps.onSubmit = payload.onSubmit; }
      if (payload.diableSubmit === undefined) { formatedProps.diableSubmit = propsDefault.payload.diableSubmit; } else { formatedProps.diableSubmit = payload.diableSubmit; }
      if (payload.onCancel === undefined) { formatedProps.onCancel = propsDefault.payload.onCancel; } else { formatedProps.onCancel = payload.onCancel; }
      if (payload.diableCancel === undefined) { formatedProps.diableCancel = propsDefault.payload.diableCancel; } else { formatedProps.diableCancel = payload.diableCancel; }
      if (payload.title === undefined) { formatedProps.title = propsDefault.payload.title; } else { formatedProps.title = payload.title; }
      if (payload.styles === undefined) { formatedProps.styles = propsDefault.payload.styles; } else { formatedProps.styles = payload.styles; }
      if (payload.data === undefined) { formatedProps.data = propsDefault.payload.data; } else { formatedProps.data = payload.data; }
      return formatedProps;
    }
    
    
    

    这写法太难看了 ES6 有什么好看的写法?

    9 条回复    2018-04-03 23:43:43 +08:00
    ZIrong
        1
    ZIrong  
       2018-04-03 20:10:17 +08:00
    ```
    const defaultProps = (payload) => {
    const formatedProps = {};
    formatedProps.onSubmit = payload.onSubmit || propsDefault.payload.onSubmit
    }
    ```
    brickyang
        2
    brickyang  
       2018-04-03 20:14:44 +08:00 via iPhone
    brickyang
        3
    brickyang  
       2018-04-03 20:19:58 +08:00 via iPhone   ❤️ 3
    具体楼主这个场景,更适合 Object.assign({}, ...defaultProps, payload)

    这个方法,payload 里如果有对应的属性,即使是 null 或空值也会覆盖到新对象中。

    短路赋值的问题是,如果 payload 中存在的属性是 null 或空值,都会使用 default 中的值。
    lolizeppelin
        4
    lolizeppelin  
    OP
       2018-04-03 20:47:48 +08:00
    谢谢 3 楼 就是这个
    lolizeppelin
        5
    lolizeppelin  
    OP
       2018-04-03 21:02:10 +08:00
    3 楼的方式不行 orz 丢属性 1 楼的可以 orz
    lrz0lrz
        6
    lrz0lrz  
       2018-04-03 23:26:37 +08:00
    lrz0lrz
        7
    lrz0lrz  
       2018-04-03 23:35:38 +08:00
    呃,理解错误,抱歉
    {...defaultProps, ...propsDefault.payload}
    这样就行了
    lolizeppelin
        8
    lolizeppelin  
    OP
       2018-04-03 23:37:27 +08:00 via Android
    握草 楼上这个方法好
    sunnygaofan
        9
    sunnygaofan  
       2018-04-03 23:43:43 +08:00 via iPhone
    @brickyang 谢谢,纠结这个问题很久了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   994 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:11 · PVG 03:11 · LAX 11:11 · JFK 14:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.