2016-11-07 66 views
1

例如,子組件通過position={{x: 50}}。如何在子組件內重新分配this.props.position等於{{x: 50, y: 0}}反應:你如何分配對象道具的默認屬性?

+0

請參閱React:https://github.com/facebook/react/issues/2568和另一個問題:http:// stackoverflow.com/questions/29194997/react-nested-defaultprops-deep-merge –

回答

1

看起來您正在使用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 } 
+0

這些代碼行是否需要在每個渲染之前運行,因爲子組件無法修改它自己的道具? –

+0

是的,如果我瞭解您的要求,您只需將新值與默認值分配給局部變量,然後在渲染時使用該變量。 Object.assign不會改變道具。 –

0

如果你只是做了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,那麼它將覆蓋默認設置

+0

這就是我試圖避免 –

+0

可以與當時的對象解構做: VAR {X,Y = 50} = this.props.position 這將使y的50違約和x是等於這個.props.position中的任何東西。如果y確實存在,那麼它將使用該默認值 – finalfreq

+0

會起作用,但有沒有辦法實際改變this.props的值,而不是爲結構化變量創建默認值? –