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

2018-04-03 20:05:38 +08:00
 lolizeppelin

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 有什么好看的写法?

2703 次点击
所在节点    程序员
9 条回复
ZIrong
2018-04-03 20:10:17 +08:00
```
const defaultProps = (payload) => {
const formatedProps = {};
formatedProps.onSubmit = payload.onSubmit || propsDefault.payload.onSubmit
}
```
brickyang
2018-04-03 20:14:44 +08:00
brickyang
2018-04-03 20:19:58 +08:00
具体楼主这个场景,更适合 Object.assign({}, ...defaultProps, payload)

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

短路赋值的问题是,如果 payload 中存在的属性是 null 或空值,都会使用 default 中的值。
lolizeppelin
2018-04-03 20:47:48 +08:00
谢谢 3 楼 就是这个
lolizeppelin
2018-04-03 21:02:10 +08:00
3 楼的方式不行 orz 丢属性 1 楼的可以 orz
lrz0lrz
2018-04-03 23:26:37 +08:00
lrz0lrz
2018-04-03 23:35:38 +08:00
呃,理解错误,抱歉
{...defaultProps, ...propsDefault.payload}
这样就行了
lolizeppelin
2018-04-03 23:37:27 +08:00
握草 楼上这个方法好
sunnygaofan
2018-04-03 23:43:43 +08:00
@brickyang 谢谢,纠结这个问题很久了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/444066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX