1 回答

TA貢獻1820條經驗 獲得超10個贊
該代碼從來都不正確,因為它寫入props:
if ((typeof this.props.match.params.lng !== 'undefined') && ((this.props.match.params.lng == 'en') || (this.props.match.params.lng == 'lt'))) {
this.props.lang = this.props.match.params.lng.toString();
}
else {
this.props.lang = 'lt';
}
您的組件只能從 props 對象中讀取props,而不能寫入它。變化在于 React 通過使對象不可擴展來強制執行這一點。
如何修復它取決于您何時需要該信息以及您需要如何處理它(顯示的代碼中似乎沒有使用 this.props.lang
任何內容):
如果它只是 的局部變量
render
,則將其設為局部變量。如果它影響您渲染組件的方式,請將其存儲為狀態(并且不要更改 中的狀態
render
,在創建或安裝時執行一次)。this
如果它是不影響渲染的實例特定信息,請將其存儲在(組件實例)的屬性中。
回復 #2 和 #3:請記住,在組件實例的生命周期內props
可能會發生變化。Props 的狀態實際上是由父級而不是組件進行管理的。所以如果你從 props 中獲取信息,當 props 改變時你需要重新獲取它。
這可能會讓我們想到#4:
讓父級向組件提供一個函數來讓組件更新
lang
。當它這樣做時,它將獲得新的lang
更新道具并重新渲染。
添加回答
舉報