例如,子组件通过position={{x: 50}}
。如何在子组件内重新分配this.props.position
等于{{x: 50, y: 0}}
反应:你如何分配对象道具的默认属性?
回答
看起来您正在使用React;如果您还使用ES2016你就可以使用Object.assign:
var initial = {x: 0, y: 0};
var passed = {x: 50};
var result = Object.assign({}, initial, passed);
console.log(result); // { x: 50, y: 0 }
这些代码行是否需要在每个渲染之前运行,因为子组件无法修改它自己的道具? –
是的,如果我了解您的要求,您只需将新值与默认值分配给局部变量,然后在渲染时使用该变量。 Object.assign不会改变道具。 –
如果你只是做了this.props.position
你不能依赖于默认道具的工作,因为默认情况下不会道具检查特定的属性失踪该对象,但会检查是否存在道具。
最简单的方法是将有两个支柱:位X &位置▲
然后在你的孩子组件,您可以同时设置默认的道具,所以如果一个被传入,而不是其他,你可以回退到默认为另一个。
getDefaultProps: function() {
return {
positionX: 50,
positionY: 0
};
},
另一种选择是,以检查是否存在它的地方被在子组件中使用,并在使用同时具有Y和X值的新对象点进行操作。
例如使用对象解构:
var {x, y=50} = this.props.position
如果预计X可能是不确定的为y,然后你也可以给X的缺省值进行传递。如果this.props.position
上存在x或y,那么它将覆盖默认设置
这就是我试图避免 –
可以与当时的对象解构做: VAR {X,Y = 50} = this.props.position 这将使y的50违约和x是等于这个.props.position中的任何东西。如果y确实存在,那么它将使用该默认值 – finalfreq
会起作用,但有没有办法实际改变this.props的值,而不是为结构化变量创建默认值? –
- 1. 将XML反序列化为对象时,类的默认属性
- 2. 设置对象属性的默认值
- 3. 如何设置对象类型的React默认道具
- 4. 使用具有默认值的属性创建对象Python
- 5. 如何在C#类的静态默认属性分配默认值?
- 6. 分配对象属性
- 7. 分配属性对象
- 8. 对象参数的接口与默认值和默认属性
- 9. Java对象集属性默认
- 10. 对象直接调用默认属性
- 11. 你如何嘲笑具有道具的Jest的反应组件?
- 12. 默认对象属性不默认为HTML
- 13. 如何设置JavaScript对象的默认__self__属性
- 14. Javascript:从默认对象中填充对象中的undefind属性
- 15. 破坏ES6默认值反应的道具
- 16. 将保留对象分配给弱属性;对象将分配
- 17. 对象传播符号如何转换反应道具?
- 18. 分配javascript对象属性的问题
- 19. Python的 - 对象属性分配失败
- 20. JavaScript的分配功能,对象属性
- 21. 如何将Groovy对象的所有匹配属性分配给Java对象?
- 22. 反应 - 按对象属性过滤
- 23. 默认属性
- 24. 如何使传播(...)符号具有反应性的对象?
- 25. 反应,和/ AFRAME对象分配错误
- 26. 反应,道具
- 27. 属性分配到内置对象
- 28. 为对象属性分配新值
- 29. 我如何分配查询结果的sequelize对象的属性
- 30. XML反序列化:对象具有默认值
请参阅React:https://github.com/facebook/react/issues/2568和另一个问题:http:// stackoverflow.com/questions/29194997/react-nested-defaultprops-deep-merge –