亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未捕獲的類型錯誤:無法定義屬性“x”:對象不可擴展

未捕獲的類型錯誤:無法定義屬性“x”:對象不可擴展

qq_笑_17 2023-08-05 21:02:56
我正在嘗試恢復一個ReactJS 16.4用webpack 3. 至于現在,我已經將所有庫升級ReactJS到v17和.webpackv5所以,我收到這個錯誤:Uncaught TypeError: can't define property "lang": Object is not extensible代碼是:class LandingPage extends React.Component {  render() {    const { i18n } = this.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';    }    if (this.props.lang !== i18n.language) {      i18n.changeLanguage(this.props.lang, (err) => {        if (err) return console.log('something went wrong loading', err)      });    }    return (      <div>        <Preloader />        <Header />        <SectionMain />        <Footer />      </div>    )  }}從那時起,似乎有些事情發生了變化。如何修復它?
查看完整描述

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任何內容):

  1. 如果它只是 的局部變量render,則將其設為局部變量。

  2. 如果它影響您渲染組件的方式,請將其存儲為狀態(并且不要更改 中的狀態render,在創建或安裝時執行一次)。

  3. this如果它是不影響渲染的實例特定信息,請將其存儲在(組件實例)的屬性中。

回復 #2 和 #3:請記住,在組件實例的生命周期內props可能會發生變化。Props 的狀態實際上是由父級而不是組件進行管理的。所以如果你從 props 中獲取信息,當 props 改變時你需要重新獲取它。

這可能會讓我們想到#4:

  1. 讓父級向組件提供一個函數來讓組件更新lang。當它這樣做時,它將獲得新的lang更新道具并重新渲染。


查看完整回答
反對 回復 2023-08-05
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號