第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 componentDidUpdare 中 React setState 導(dǎo)致超出最大更新深度

在 componentDidUpdare 中 React setState 導(dǎo)致超出最大更新深度

慕仙森 2023-11-02 21:57:11
我正進(jìn)入(狀態(tài)錯(cuò)誤:超出最大更新深度。當(dāng)組件在 componentWillUpdate 或 componentDidUpdate 中重復(fù)調(diào)用 setState 時(shí),可能會(huì)發(fā)生這種情況。React 限制嵌套更新的數(shù)量以防止無(wú)限循環(huán)。但我讀到的內(nèi)容應(yīng)該能夠在 componentDidMount 中調(diào)用 setState 而不會(huì)出現(xiàn)錯(cuò)誤。class MyComponent extends Component {constructor(props) {    super(props);    this.state = {        matchtedProducts: [],        products: [],    }}async componentDidMount() {    try {        const products = await getProducts()        this.setState({ products })    } catch(err) {        console.log(err)    }}componentDidUpdate() {    const productColor = this.props.size.trim().toLowerCase()    const productSize = this.props.color.trim().toLowerCase()    const matches = []    this.state.products.map(product => {        const title = product.title        const titleSpliitet = title.split(',')        let color = titleSpliitet[1].trim().toLowerCase()        let size = titleSpliitet[2].trim().toLowerCase()        if(color == productColor && size == productSize) {            matches.push(product)        }    })    this.setState({matchtedProducts: matches})}render() {    return (<div></div>)}}
查看完整描述

4 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

發(fā)生這種情況是因?yàn)槊總€(gè) setState 都會(huì)觸發(fā)一次渲染,然后再次觸發(fā)一次 componentDidMount,這基本上會(huì)導(dǎo)致無(wú)限循環(huán)。要停止該循環(huán),您需要設(shè)置一些條件,以防止再次渲染,例如


    componentDidUpdate(previousProps, previousState) {

    if (previousProps.data !== this.props.data) {

        this.setState({/*....*/})

    }

   }


查看完整回答
反對(duì) 回復(fù) 2023-11-02
?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

我遇到了同樣的錯(cuò)誤。在使用效果方法中,我使用 axios 從后端獲取數(shù)據(jù)并更新了狀態(tài)。但在更新?tīng)顟B(tài)之前,我沒(méi)有將 json 數(shù)據(jù)轉(zhuǎn)換為狀態(tài)的數(shù)據(jù)類(lèi)型,這就是導(dǎo)致此錯(cuò)誤的原因。


錯(cuò)誤代碼 :


Useeffect(() => {

    fetch

       .then((res) =>{

           setDate(res.data.date)

       }) 

})

正確代碼:


Useeffect(() => {

    fetch

        .then((res) =>{

            setDate(new Date(res.data.date)) 

    }) 

}) 


查看完整回答
反對(duì) 回復(fù) 2023-11-02
?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

看來(lái)你想在 props 改變時(shí)改變狀態(tài)來(lái)過(guò)濾一些產(chǎn)品。我刪除componentDidUpdate代碼并在組件中添加一個(gè)方法來(lái)進(jìn)行過(guò)濾,然后我將從父組件中調(diào)用該方法


class MyComponent extends Component {

constructor(props) {

    super(props);

    this.state = {

        matchtedProducts: [],

        products: [],

    }

}

async componentDidMount() {

    try {

        const products = await getProducts()

        this.setState({ products })

    } catch(err) {

        console.log(err)

    }

}


updateMatches = () => {


    const productColor = this.props.size.trim().toLowerCase()

    const productSize = this.props.color.trim().toLowerCase()

    const matches = []


    this.state.products.map(product => {

        const title = product.title

        const titleSpliitet = title.split(',')


        let color = titleSpliitet[1].trim().toLowerCase()

        let size = titleSpliitet[2].trim().toLowerCase()


        if(color == productColor && size == productSize) {

            matches.push(product)

        }


    })

    this.setState({matchtedProducts: matches})


}


render() {

    return (<div></div>)

}


}

并在父組件中


changeSizeAndColor = () => {

     //note that I called updateMatches of MyComponent  

     this.setState({color : ... , size : ...} , () => this.myComponent.updateMatches());

}


render() { 

    return <MyComponent ref={ref => this.myComponent = ref} color={...} size={...}/>

}


查看完整回答
反對(duì) 回復(fù) 2023-11-02
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

我認(rèn)為你必須傳遞prevProps和/或prevState作為 的參數(shù)componentDidUpdate,并且僅當(dāng)狀態(tài)的 prop 或?qū)傩园l(fā)生更改時(shí)才執(zhí)行代碼,


例子:


componentDidUpdate(prevProps, prevState) {

  // if the property count of the state has changed

  if (prevState.count !== this.state.count) {

    // then do your code

  }

}

文檔:https ://en.reactjs.org/docs/react-component.html#componentdidupdate


查看完整回答
反對(duì) 回復(fù) 2023-11-02
  • 4 回答
  • 0 關(guān)注
  • 226 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)