2016-10-14 81 views
1

是否可以爲組件定義默認上下文,以便如果父組件未將上下文傳遞給子組件,那麼子組件不會中斷?我現在唯一能想到的就是在React中設置默認上下文

constructor() { 
    super(); 
    if (!this.context.role) { 
     this.context.role = 'public'; 
    } 
} 

這樣可以嗎?

回答

1

上下文與道具相似,只不過上下文中的更改並未實際觸發渲染。通常,上下文從狀態或商店中獲取它的價值,所以這通常不是問題。另一個缺點是與道具不同,React沒有提供設置默認值的方法。

您可以在react的回購庫中提出功能請求。解決方法是在使用它之前爲其分配默認值。 e.g:

class MyComponent { 
    // use this.getRole to access the role 
    getRole() { 
     return this.context.role || 'public'; 
    } 
} 

編輯:您的代碼段是行不通的,因爲背景值可能可以獲得由父渲染流水線的過程中重寫;加上它沒有記錄直接更新上下文對象時會發生什麼。