iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Modern Web

自己工具,自己 React - React學習系列 第 18

【D18】 再探 props:修改上下層資料(part 2)

  • 分享至 

  • xImage
  •  

上次使用了參數,讓可以從親層修改子層,但要如何讓子層修改親層呢?

製作新子層

要修改親層的方法,就是在修改的 handler 傳到子層,藉由呼叫 handler 來修改在親層的變數:

function CorrectChildLayer(props) {
  const { name, counter, namehandler, counterhandler } = props;
  namehandler("睫毛");
  counterhandler("101");

  return (
    <div>
      <div>
        <h2>Handler 子層</h2>
      </div>
      <div>
        <label>
          Hi, {name} 是 {counter} 歲
        </label>
      </div>
    </div>
  );
}

export default CorrectChildLayer;

這邊會從親層傳下兩個 handlernamehandlercounterhandler,然後把值放進去到這兩者中,讓他們修改。

修改親層

為了要讓子曾可以呼叫,因此親層增加這個 component

<div>
  <CorrectChildLayer
    name={name}
    counter={counter}
    namehandler={handleChangeName}
    counterhandler={handleChangeCounter}
  ></CorrectChildLayer>
</div>

並且實作 handleChangeNamehandleChangeCounter 這兩個 handler

const handleChangeName = (name) => {
  const newStr = name;
  setName(newStr);
};
  const handleChangeCounter = (name) => {
  const newStr = name;
  setCounter(newStr);
};

這樣就可以由子層進行修改,把名字改成「睫毛」和「101」,這時其他 component 的值也跟著修改囉!

https://ithelp.ithome.com.tw/upload/images/20221004/20103826GU2Xgoozpz.png


後記

雖然這樣可以修改頁面資訊,不過卻會發生錯誤資訊:

Warning: Cannot update a component (`PropSample`) while rendering a different component (`CorrectChildLayer`). To locate the bad setState() call inside `CorrectChildLayer`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render
    at CorrectChildLayer (http://localhost:3000/static/js/bundle.js:125:5)

這問題是因為值正在轉譯時,值又被更動。詳細資訊與修改方式可以參考:《Warning: Cannot update a component X while rendering a different Y component To locate the bad setState() call inside Y,》


上一篇
【D17】 再探 props:修改上下層資料(part 1)
下一篇
【D19】 小工具:身分證製造機(part 1)-規則
系列文
自己工具,自己 React - React學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言