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

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

如何在每個(gè)子掛載上更新父母的狀態(tài),而不是在所有子掛載之后?

如何在每個(gè)子掛載上更新父母的狀態(tài),而不是在所有子掛載之后?

浮云間 2022-10-27 15:12:14
我正在嘗試從子元素中更新父元素的狀態(tài)。我希望更新在每個(gè)子元素安裝后立即發(fā)生,因此我使用useEffect鉤子并從那里調(diào)用更新函數(shù)setData(從父級(jí)傳遞下來(lái))。然而,似乎每個(gè)隨后被安裝的子元素都沒(méi)有注意到先前安裝的子元素對(duì)數(shù)據(jù)所做的更改。也就是說(shuō),它對(duì)一個(gè)空data數(shù)組進(jìn)行操作,而對(duì)于第二個(gè)、第三個(gè)和第四個(gè)元素,該數(shù)組不應(yīng)再為空。我相信這是因?yàn)閟etData僅在所有元素安裝后才計(jì)劃執(zhí)行。這個(gè)對(duì)嗎?如果是這樣,我該如何解決這個(gè)問(wèn)題? function Parent() {                        const [data, setData] = React.useState([])                                      function changeData(index, value) {                logData()                let new_data = Array.from(data)                new_data[index] = value                setData(new_data)            }                        function logData() {                console.log(data)            }                        let children = Array(4).fill(null).map((item, index) => {                return <Child id={index} changeData={changeData} />            })                        return (                <div>                    {children}                    <button onClick={logData}>Log data</button>                </div>            )        }  function Child(props) {      const ref = React.useRef(null)      React.useEffect(() => {          props.changeData(ref.current.id, ref.current.id)      }, [])      function onClickHandler(e) {          let element_id = e.target.id          props.changeData(element_id, element_id)      }      return (          <button ref={ref} id={props.id} onClick={onClickHandler}>Child</button>      )  }  ReactDOM.render(<Parent />, document.getElementById('root'))<!DOCTYPE html>    <html>        <body>            <head>                <script src="https://unpkg.com/react@^16/umd/react.production.min.js"></script>                <script src="https://unpkg.com/react-dom@16.13.0/umd/react-dom.production.min.js"></script>                <script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>            </head>            <div id="root"></div>        </body>    </html>
查看完整描述

1 回答

?
MM們

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

根據(jù)當(dāng)前狀態(tài)更新?tīng)顟B(tài)時(shí),您應(yīng)該始終使用setState. 有關(guān)詳細(xì)信息,請(qǐng)參閱為什么 setState 給了我錯(cuò)誤的值。

如果您不使用回調(diào)版本,setState對(duì)依賴于當(dāng)前狀態(tài)的連續(xù)調(diào)用將相互覆蓋,如果它們被 react 批處理,可能會(huì)導(dǎo)致不正確的狀態(tài)。

function changeData(index, value) {

    logData()

    setData(current => {

        // current is the current state including all previous calls to setState in this batch

        const new_data = Array.from(current);

        new_data[index] = value;

        return new_data;

    });

}

更新示例:


function Parent() {

            

            const [data, setData] = React.useState([])

                          

            function changeData(index, value) {

                logData()

                setData(current => {

                  const new_data = Array.from(current);

                  new_data[index] = value;

                  return new_data;

                });

            }

            

            function logData() {

                console.log(data)

            }

            

            let children = Array(4).fill(null).map((item, index) => {

                return <Child id={index} changeData={changeData} />

            })

            

            return (

                <div>

                    {children}

                    <button onClick={logData}>Log data</button>

                </div>

            )

        }


  function Child(props) {


      const ref = React.useRef(null)


      React.useEffect(() => {

          props.changeData(ref.current.id, ref.current.id)

      }, [])


      function onClickHandler(e) {

          let element_id = e.target.id

          props.changeData(element_id, element_id)

      }


      return (

          <button ref={ref} id={props.id} onClick={onClickHandler}>Child</button>

      )

  }


  ReactDOM.render(<Parent />, document.getElementById('root'))

<!DOCTYPE html>

    <html>

        <body>

            <head>

                <script src="https://unpkg.com/react@^16/umd/react.production.min.js"></script>

                <script src="https://unpkg.com/react-dom@16.13.0/umd/react-dom.production.min.js"></script>

                <script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>

            </head>

            <div id="root"></div>

        </body>

    </html>

編輯useEffect:我創(chuàng)建了一個(gè)帶有可能解決方案的沙箱,您的孩子不需要:



查看完整回答
反對(duì) 回復(fù) 2022-10-27
  • 1 回答
  • 0 關(guān)注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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